[libvirt] [PATCH 12/34] qemu: cpu hotplug: Set vcpu state directly in the new structure
John Ferlan
jferlan at redhat.com
Mon Jan 18 14:57:23 UTC 2016
On 01/14/2016 11:27 AM, Peter Krempa wrote:
> Avoid using virDomainDefSetVcpus when we can set it directly in the
> structure.
> ---
> src/qemu/qemu_driver.c | 24 ++++++++++++++++++++++--
> 1 file changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index f3844d6..3aa49f2 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -4680,6 +4680,7 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver,
> unsigned int vcpu)
> {
> qemuDomainObjPrivatePtr priv = vm->privateData;
> + virDomainVcpuInfoPtr vcpuinfo;
> int ret = -1;
> int rc;
> int oldvcpus = virDomainDefGetVcpus(vm->def);
> @@ -4689,6 +4690,15 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver,
> char *mem_mask = NULL;
> virDomainNumatuneMemMode mem_mode;
>
> + if (!(vcpuinfo = virDomainDefGetVcpu(vm->def, vcpu)))
> + return -1;
> +
> + if (vcpuinfo->online) {
> + virReportError(VIR_ERR_INVALID_ARG,
> + _("vCPU '%u' is already online"), vcpu);
> + return -1;
> + }
> +
Yet another construct that could benefit from an OnlineVcpuMap and
virBitmapCountBits would tell us how many bits are set (oldvcpus in this
instance).
> qemuDomainObjEnterMonitor(driver, vm);
>
> rc = qemuMonitorSetCPU(priv->mon, vcpu, true);
> @@ -4704,7 +4714,7 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver,
> if (rc < 0)
> goto cleanup;
>
> - ignore_value(virDomainDefSetVcpus(vm->def, oldvcpus + 1));
> + vcpuinfo->online = true;
Setting online bit directly...
[and repeat for DelVcpu]
John
>
> if (ncpupids < 0)
> goto cleanup;
> @@ -4780,12 +4790,22 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver,
> unsigned int vcpu)
> {
> qemuDomainObjPrivatePtr priv = vm->privateData;
> + virDomainVcpuInfoPtr vcpuinfo;
> int ret = -1;
> int rc;
> int oldvcpus = virDomainDefGetVcpus(vm->def);
> pid_t *cpupids = NULL;
> int ncpupids = 0;
>
> + if (!(vcpuinfo = virDomainDefGetVcpu(vm->def, vcpu)))
> + return -1;
> +
> + if (!vcpuinfo->online) {
> + virReportError(VIR_ERR_INVALID_ARG,
> + _("vCPU '%u' is already offline"), vcpu);
> + return -1;
> + }
> +
> qemuDomainObjEnterMonitor(driver, vm);
>
> rc = qemuMonitorSetCPU(priv->mon, vcpu, false);
> @@ -4809,7 +4829,7 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver,
> goto cleanup;
> }
>
> - ignore_value(virDomainDefSetVcpus(vm->def, oldvcpus - 1));
> + vcpuinfo->online = false;
>
> if (qemuDomainDelCgroupForThread(priv->cgroup,
> VIR_CGROUP_THREAD_VCPU, vcpu) < 0)
>
More information about the libvir-list
mailing list