[libvirt] [PATCH v2 2/3] qemu: check the kvm host cpu max limits in virConnectGetDomainCapabilities
Andrea Bolognani
abologna at redhat.com
Fri Jun 24 17:19:55 UTC 2016
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 at 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
More information about the libvir-list
mailing list