On 03.06.2016 14:53, Riku Voipio wrote:
ARM/Aarch64 /proc/cpuinfo has no virtualization related flags.
Refactor the Qemu/KVM test a bit:
1) run the "for hardware virtualization" test only on plaforms with known
cpuinfo flags (x86, s390)
2) test for /dev/kvm also on platforms where no cpu flags are set
Finally Add a more generic error hint message for non-x86 plaforms
when /dev/kvm is missing.
Signed-off-by: Riku Voipio <riku.voipio(a)linaro.org>
---
tools/virt-host-validate-qemu.c | 29 ++++++++++++++++++++---------
1 file changed, 20 insertions(+), 9 deletions(-)
diff --git a/tools/virt-host-validate-qemu.c b/tools/virt-host-validate-qemu.c
index 56ec3c7..520c8ed 100644
--- a/tools/virt-host-validate-qemu.c
+++ b/tools/virt-host-validate-qemu.c
@@ -32,8 +32,9 @@ int virHostValidateQEMU(void)
virBitmapPtr flags;
int ret = 0;
bool hasHwVirt = false;
-
- virHostMsgCheck("QEMU", "%s", _("for hardware
virtualization"));
+ bool hasVirtFlag = false;
+ char *kvmhint = _("Check that CPU and firmware supports virtualization "
+ "and kvm module is loaded");
if (!(flags = virHostValidateGetCPUFlags()))
return -1;
@@ -41,12 +42,16 @@ int virHostValidateQEMU(void)
switch (virArchFromHost()) {
case VIR_ARCH_I686:
case VIR_ARCH_X86_64:
+ hasVirtFlag = true;
+ kvmhint =_("Check that the 'kvm-intel' or 'kvm-amd' modules
are "
Missing space after '='.
+ "loaded & the BIOS has enabled
virtualization");
if (virBitmapIsBitSet(flags, VIR_HOST_VALIDATE_CPU_FLAG_SVM) ||
virBitmapIsBitSet(flags, VIR_HOST_VALIDATE_CPU_FLAG_VMX))
hasHwVirt = true;
break;
case VIR_ARCH_S390:
case VIR_ARCH_S390X:
+ hasVirtFlag = true;
if (virBitmapIsBitSet(flags, VIR_HOST_VALIDATE_CPU_FLAG_SIE))
hasHwVirt = true;
break;
@@ -54,21 +59,27 @@ int virHostValidateQEMU(void)
hasHwVirt = false;
}
- if (hasHwVirt) {
- virHostMsgPass();
+ if (hasVirtFlag) {
+ virHostMsgCheck("QEMU", "%s", _("for hardware
virtualization"));
+ if (hasHwVirt)
+ virHostMsgPass();
+ else {
+ virHostMsgFail(VIR_HOST_VALIDATE_FAIL,
+ _("Only emulated CPUs are available, performance will be
significantly limited"));
+ ret = -1;
+ }
Missing curly braces for the first body.
+ }
+
+ if (hasHwVirt || !hasVirtFlag) {
if (virHostValidateDeviceExists("QEMU", "/dev/kvm",
VIR_HOST_VALIDATE_FAIL,
- _("Check that the 'kvm-intel' or
'kvm-amd' modules are "
- "loaded & the BIOS has enabled
virtualization")) < 0)
+ kvmhint) <0)
ret = -1;
else if (virHostValidateDeviceAccessible("QEMU",
"/dev/kvm",
VIR_HOST_VALIDATE_FAIL,
_("Check /dev/kvm is world
writable or you are in "
"a group that is allowed to
access it")) < 0)
ret = -1;
- } else {
- virHostMsgFail(VIR_HOST_VALIDATE_WARN,
- _("Only emulated CPUs are available, performance will be
significantly limited"));
}
virBitmapFree(flags);
Okay, so IIUC this is just so that we don't produce an error on
platforms such as arm where HW virt is not advertised in cpu flags.
Firstly, it's shame it isn't advertised there. Secondly, what can we do
other than adjust our code just like you're doing here?
Fixed the small syntax nits, ACked and pushed.
Congratulations on your first libvirt contribution!
Michal