Remove some obsolete code, and improve the behavior
of the 'virsh domcapabilities --virttype kvm' command when
running on non-Linux platform.
Andrea Bolognani (3):
util: hostcpu: Add virHostCPUGetKVMMaxVCPUs() stub
util: hostcpu: Drop obsolete compatibility code
qemu: capabilities: Make virHostCPUGetKVMMaxVCPUs() errors fatal
src/qemu/qemu_capabilities.c | 9 ++++++---
src/util/virhostcpu.c | 25 ++++++++++++-------------
2 files changed, 18 insertions(+), 16 deletions(-)
--
2.7.4
Show replies by date
If we don't HAVE_LINUX_KVM_H, we can't query /dev/kvm to discover
the limits on the number of vCPUs, so we report an error and
return a negative value instead.
---
src/util/virhostcpu.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
index 4ff4e72..a33932f 100644
--- a/src/util/virhostcpu.c
+++ b/src/util/virhostcpu.c
@@ -1299,6 +1299,7 @@ virHostCPUGetThreadsPerSubcore(virArch arch ATTRIBUTE_UNUSED)
#endif /* HAVE_LINUX_KVM_H && defined(KVM_CAP_PPC_SMT) */
+#if HAVE_LINUX_KVM_H
int
virHostCPUGetKVMMaxVCPUs(void)
{
@@ -1310,11 +1311,11 @@ virHostCPUGetKVMMaxVCPUs(void)
return -1;
}
-#ifdef KVM_CAP_MAX_VCPUS
+# ifdef KVM_CAP_MAX_VCPUS
/* at first try KVM_CAP_MAX_VCPUS to determine the maximum count */
if ((ret = ioctl(fd, KVM_CHECK_EXTENSION, KVM_CAP_MAX_VCPUS)) > 0)
goto cleanup;
-#endif /* KVM_CAP_MAX_VCPUS */
+# endif /* KVM_CAP_MAX_VCPUS */
/* as a fallback get KVM_CAP_NR_VCPUS (the recommended maximum number of
* vcpus). Note that on most machines this is set to 160. */
@@ -1329,3 +1330,12 @@ virHostCPUGetKVMMaxVCPUs(void)
VIR_FORCE_CLOSE(fd);
return ret;
}
+#else
+int
+virHostCPUGetKVMMaxVCPUs(void)
+{
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("KVM is not supported on this platform"));
+ return -1;
+}
+#endif /* HAVE_LINUX_KVM_H */
--
2.7.4
All Linux releases we support (RHEL6 era) include these
definitions.
---
src/util/virhostcpu.c | 11 -----------
1 file changed, 11 deletions(-)
diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
index a33932f..8a8bda8 100644
--- a/src/util/virhostcpu.c
+++ b/src/util/virhostcpu.c
@@ -65,17 +65,6 @@ VIR_LOG_INIT("util.hostcpu");
#define KVM_DEVICE "/dev/kvm"
-/* add definitions missing in older linux/kvm.h */
-#ifndef KVMIO
-# define KVMIO 0xAE
-#endif
-#ifndef KVM_CHECK_EXTENSION
-# define KVM_CHECK_EXTENSION _IO(KVMIO, 0x03)
-#endif
-#ifndef KVM_CAP_NR_VCPUS
-# define KVM_CAP_NR_VCPUS 9 /* returns max vcpus per vm */
-#endif
-
#if defined(__FreeBSD__) || defined(__APPLE__)
static int
--
2.7.4
An error in virHostCPUGetKVMMaxVCPUs() means we've been unable
to access /dev/kvm, or we're running on a platform that doesn't
support KVM in the first place.
If that's the case, we shouldn't ignore the error and report
domcapabilities even though we know the user won't be able to
start any KVM guest.
---
src/qemu/qemu_capabilities.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 28d5321..ae54c94 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -4349,9 +4349,12 @@ virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
domCaps->maxvcpus = virQEMUCapsGetMachineMaxCpus(qemuCaps,
domCaps->machine);
if (virttype == VIR_DOMAIN_VIRT_KVM) {
- int hostmaxvcpus = virHostCPUGetKVMMaxVCPUs();
- if (hostmaxvcpus >= 0)
- domCaps->maxvcpus = MIN(domCaps->maxvcpus, hostmaxvcpus);
+ int hostmaxvcpus;
+
+ if ((hostmaxvcpus = virHostCPUGetKVMMaxVCPUs()) < 0)
+ return -1;
+
+ domCaps->maxvcpus = MIN(domCaps->maxvcpus, hostmaxvcpus);
}
if (virQEMUCapsFillDomainOSCaps(os, firmwares, nfirmwares) < 0 ||
--
2.7.4