[libvirt] [PATCH 20/34] qemu: cpu hotplug: Fix error handling logic

John Ferlan jferlan at redhat.com
Mon Nov 23 19:29:44 UTC 2015



On 11/20/2015 10:22 AM, Peter Krempa wrote:
> The cpu hotplug helper functions used negative error handling in a part
> of them, although some code that was added later didn't properly set the
> error codes in some cases. This would cause improper error messages in
> cases where we couldn't modify the numa cpu mask and a few other cases.
> 
> Fix the logic by converting it to the regularly used pattern.
> ---
>  src/qemu/qemu_driver.c | 26 +++++++++-----------------
>  1 file changed, 9 insertions(+), 17 deletions(-)
> 

ACK (could have removed a couple of open/close {} brackets [1]

One other "could do" thing since I peeked to the next patch -
qemuMonitorSetCPU could lift the comments from qemuMonitorJSONSetCPU or
qemuMonitorTextSetCPU...


John

> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index a483220..49fdd63 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -4721,10 +4721,6 @@ qemuDomainHotplugVcpus(virQEMUDriverPtr driver,
>          vcpus++;
>      }
> 
> -    /* hotplug succeeded */
> -
> -    ret = 0;
> -
>      /* After hotplugging the CPUs we need to re-detect threads corresponding
>       * to the virtual CPUs. Some older versions don't provide the thread ID
>       * or don't have the "info cpus" command (and they don't support multiple
> @@ -4732,12 +4728,12 @@ qemuDomainHotplugVcpus(virQEMUDriverPtr driver,
>       * fatal */
>      if ((ncpupids = qemuMonitorGetCPUInfo(priv->mon, &cpupids)) <= 0) {
>          virResetLastError();
> +        ret = 0;
>          goto exit_monitor;
>      }
> -    if (qemuDomainObjExitMonitor(driver, vm) < 0) {
> -        ret = -1;
> +
> +    if (qemuDomainObjExitMonitor(driver, vm) < 0)
>          goto cleanup;
> -    }
> 
>      if (ncpupids != vcpus) {
>          virReportError(VIR_ERR_INTERNAL_ERROR,
> @@ -4745,7 +4741,6 @@ qemuDomainHotplugVcpus(virQEMUDriverPtr driver,
>                           "got %d, wanted %d"),
>                         ncpupids, vcpus);
>          vcpus = oldvcpus;
> -        ret = -1;
>          goto cleanup;
>      }
> 
> @@ -4772,12 +4767,10 @@ qemuDomainHotplugVcpus(virQEMUDriverPtr driver,
>              if (qemuDomainHotplugAddPin(vm->def->cpumask, i,
>                                          &vm->def->cputune.vcpupin,
>                                          &vm->def->cputune.nvcpupin) < 0) {
> -                ret = -1;
>                  goto cleanup;
>              }

[1] {} not necessary

>              if (qemuDomainHotplugPinThread(vm->def->cpumask, i, cpupids[i],
>                                             cgroup_vcpu) < 0) {
> -                ret = -1;
>                  goto cleanup;
>              }

[1] {} not necessary

>          }
> @@ -4794,6 +4787,8 @@ qemuDomainHotplugVcpus(virQEMUDriverPtr driver,
>      priv->vcpupids = cpupids;
>      cpupids = NULL;
> 
> +    ret = 0;
> +
>   cleanup:
>      VIR_FREE(cpupids);
>      VIR_FREE(mem_mask);
> @@ -4841,8 +4836,6 @@ qemuDomainHotunplugVcpus(virQEMUDriverPtr driver,
>          vcpus--;
>      }
> 
> -    ret = 0;
> -
>      /* After hotplugging the CPUs we need to re-detect threads corresponding
>       * to the virtual CPUs. Some older versions don't provide the thread ID
>       * or don't have the "info cpus" command (and they don't support multiple
> @@ -4850,19 +4843,17 @@ qemuDomainHotunplugVcpus(virQEMUDriverPtr driver,
>       * fatal */
>      if ((ncpupids = qemuMonitorGetCPUInfo(priv->mon, &cpupids)) <= 0) {
>          virResetLastError();
> +        ret = 0;
>          goto exit_monitor;
>      }
> -    if (qemuDomainObjExitMonitor(driver, vm) < 0) {
> -        ret = -1;
> +    if (qemuDomainObjExitMonitor(driver, vm) < 0)
>          goto cleanup;
> -    }
> 
>      /* check if hotunplug has failed */
>      if (ncpupids == oldvcpus) {
>          virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
>                         _("qemu didn't unplug the vCPUs properly"));
>          vcpus = oldvcpus;
> -        ret = -1;
>          goto cleanup;
>      }
> 
> @@ -4872,7 +4863,6 @@ qemuDomainHotunplugVcpus(virQEMUDriverPtr driver,
>                           "got %d, wanted %d"),
>                         ncpupids, vcpus);
>          vcpus = oldvcpus;
> -        ret = -1;
>          goto cleanup;
>      }
> 
> @@ -4892,6 +4882,8 @@ qemuDomainHotunplugVcpus(virQEMUDriverPtr driver,
>      priv->vcpupids = cpupids;
>      cpupids = NULL;
> 
> +    ret = 0;
> +
>   cleanup:
>      VIR_FREE(cpupids);
>      if (virDomainObjIsActive(vm) &&
> 




More information about the libvir-list mailing list