On Fri, 2016-06-24 at 20:34 +0530, Shivaprasad G Bhat wrote:
The qemu limit and host limit both should be considered for
the domain vcpu max limits.
Signed-off-by: Shivaprasad G Bhat <sbhat(a)linux.vnet.ibm.com>
---
src/qemu/qemu_capabilities.c | 11 ++++++++---
src/qemu/qemu_capabilities.h | 3 ++-
src/qemu/qemu_driver.c | 2 +-
tests/domaincapstest.c | 3 ++-
4 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 01466fc..ff5ad19 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -38,6 +38,7 @@
#include "virbitmap.h"
#include "virnodesuspend.h"
#include "virnuma.h"
+#include "virhostcpu.h"
#include "qemu_monitor.h"
#include "virstring.h"
#include "qemu_hostdev.h"
@@ -4336,16 +4337,20 @@ int
virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
virQEMUCapsPtr qemuCaps,
virFirmwarePtr *firmwares,
- size_t nfirmwares)
+ size_t nfirmwares,
+ virDomainVirtType virttype)
I missed this the first time around, but passing virttype
here is kinda pointless as it can be retrieved from
domCaps->virttype. However, that would cause the test
suite to depend on the host state, /dev/kvm in particular).
So ACK to this approach for now, but there should be a
follow-up patch that updates domaincapstest to access a
mocked /dev/kvm and gets rid of this extra parameter.
{
virDomainCapsOSPtr os = &domCaps->os;
virDomainCapsDeviceDiskPtr disk = &domCaps->disk;
virDomainCapsDeviceHostdevPtr hostdev = &domCaps->hostdev;
virDomainCapsDeviceGraphicsPtr graphics = &domCaps->graphics;
virDomainCapsDeviceVideoPtr video = &domCaps->video;
- int maxvcpus = virQEMUCapsGetMachineMaxCpus(qemuCaps, domCaps->machine);
- domCaps->maxvcpus = maxvcpus;
+ domCaps->maxvcpus = virQEMUCapsGetMachineMaxCpus(qemuCaps, domCaps->machine);
Line's too long, should have been split into two.
+ if (virttype == VIR_DOMAIN_VIRT_KVM) {
+ int hostmaxvcpus = virHostCPUGetKVMMaxVCPUs();
+ domCaps->maxvcpus = MIN(domCaps->maxvcpus, hostmaxvcpus);
+ }
I mentioned during the first round of reviews that the
value returned by virHostCPUGetKVMMaxVCPUs() should be
checked, because it could be <0 if /dev/kvm could not
be accessed.
ACK, I've squashed in the following trivial diff and
pushed the patch.
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index ff5ad19..28d5321 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -4346,10 +4346,12 @@ virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
virDomainCapsDeviceGraphicsPtr graphics = &domCaps->graphics;
virDomainCapsDeviceVideoPtr video = &domCaps->video;
- domCaps->maxvcpus = virQEMUCapsGetMachineMaxCpus(qemuCaps, domCaps->machine);
+ domCaps->maxvcpus = virQEMUCapsGetMachineMaxCpus(qemuCaps,
+ domCaps->machine);
if (virttype == VIR_DOMAIN_VIRT_KVM) {
int hostmaxvcpus = virHostCPUGetKVMMaxVCPUs();
- domCaps->maxvcpus = MIN(domCaps->maxvcpus, hostmaxvcpus);
+ if (hostmaxvcpus >= 0)
+ domCaps->maxvcpus = MIN(domCaps->maxvcpus, hostmaxvcpus);
}
if (virQEMUCapsFillDomainOSCaps(os, firmwares, nfirmwares) < 0 ||
--
Andrea Bolognani / Red Hat / Virtualization