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@xxxxxxxxx> --- 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