POWER hosts does not implement CPU virtualization extensions like
x86 or s390x. Instead, all bare-metal POWER hosts are considered
to be virtualization ready.
For POWER, the validation is done by checking if the virtualization
module kvm_hv is loaded in the host. If not, we should warn the
user about it.
Signed-off-by: Daniel Henrique Barboza <danielhb413(a)gmail.com>
---
tools/virt-host-validate-common.c | 27 +++++++++++++++++++++++++++
tools/virt-host-validate-common.h | 2 ++
tools/virt-host-validate-qemu.c | 15 +++++++++++++++
3 files changed, 44 insertions(+)
diff --git a/tools/virt-host-validate-common.c b/tools/virt-host-validate-common.c
index dc7523dd86..fbefbada96 100644
--- a/tools/virt-host-validate-common.c
+++ b/tools/virt-host-validate-common.c
@@ -412,3 +412,30 @@ int virHostValidateIOMMU(const char *hvname,
virHostMsgPass();
return 0;
}
+
+
+bool virHostKernelModuleIsLoaded(const char *module)
+{
+ FILE *fp;
+ bool ret = false;
+
+ if (!(fp = fopen("/proc/modules", "r")))
+ return false;
+
+ do {
+ char line[1024];
+
+ if (!fgets(line, sizeof(line), fp))
+ break;
+
+ if (STRPREFIX(line, module)) {
+ ret = true;
+ break;
+ }
+
+ } while (1);
+
+ VIR_FORCE_FCLOSE(fp);
+
+ return ret;
+}
diff --git a/tools/virt-host-validate-common.h b/tools/virt-host-validate-common.h
index a20470fa72..8ae60a21de 100644
--- a/tools/virt-host-validate-common.h
+++ b/tools/virt-host-validate-common.h
@@ -82,3 +82,5 @@ int virHostValidateCGroupControllers(const char *hvname,
int virHostValidateIOMMU(const char *hvname,
virHostValidateLevel level);
+
+bool virHostKernelModuleIsLoaded(const char *module);
diff --git a/tools/virt-host-validate-qemu.c b/tools/virt-host-validate-qemu.c
index ff3c1f0231..bd717a604e 100644
--- a/tools/virt-host-validate-qemu.c
+++ b/tools/virt-host-validate-qemu.c
@@ -57,6 +57,11 @@ int virHostValidateQEMU(void)
if (virBitmapIsBitSet(flags, VIR_HOST_VALIDATE_CPU_FLAG_SIE))
hasHwVirt = true;
break;
+ case VIR_ARCH_PPC64:
+ case VIR_ARCH_PPC64LE:
+ hasVirtFlag = true;
+ hasHwVirt = true;
+ break;
default:
hasHwVirt = false;
}
@@ -84,6 +89,16 @@ int virHostValidateQEMU(void)
ret = -1;
}
+ if (arch == VIR_ARCH_PPC64 || arch == VIR_ARCH_PPC64LE) {
+ virHostMsgCheck("QEMU", "%s", _("for PowerPC KVM module
loaded"));
+
+ if (!virHostKernelModuleIsLoaded("kvm_hv"))
+ virHostMsgFail(VIR_HOST_VALIDATE_WARN,
+ _("Load kvm_hv for better performance"));
+ else
+ virHostMsgPass();
+ }
+
virBitmapFree(flags);
if (virHostValidateDeviceExists("QEMU", "/dev/vhost-net",
--
2.24.1