[libvirt] [PATCH 5/5] qemu: Ensure reported VCPU state is current in driver API

Peter Krempa pkrempa at redhat.com
Mon Jul 18 09:35:51 UTC 2016


On Thu, Jul 14, 2016 at 16:35:42 +0200, Viktor Mihajlovski wrote:
> Refresh the VCPU halted states in API functions returning domain
> VCPU state information to make sure it's current. This affects
> qemuDomainGetVcpus and  qemuDomainGetStatsVcpu
> 
> Signed-off-by: Viktor Mihajlovski <mihajlov at linux.vnet.ibm.com>
> Signed-off-by: Boris Fiuczynski <fiuczy at linux.vnet.ibm.com>
> ---
>  src/qemu/qemu_driver.c | 23 +++++++++++++++++++++--
>  1 file changed, 21 insertions(+), 2 deletions(-)
> 

[..]

> @@ -5283,6 +5288,13 @@ qemuDomainGetVcpus(virDomainPtr dom,
>          goto cleanup;
>      }
>  
> +    if (qemuDomainRefreshVcpuHalted(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) {

APIs calling the monitor need to enter a job since monitor calls unlock
the domain. There wouldn't be anything guarding the API.

> +        virReportError(VIR_ERR_INTERNAL_ERROR,
> +                       "%s",
> +                       _("could not refresh CPU states"));
> +        return -1;

This skips cleanup section where the VM object needs to be unlocked.

> +    }
> +
>      ret = qemuDomainHelperGetVcpus(vm, info, NULL, maxinfo, cpumaps, maplen);
>  
>   cleanup:


> @@ -18565,6 +18577,13 @@ qemuDomainGetStatsVcpu(virQEMUDriverPtr driver ATTRIBUTE_UNUSED,
>          VIR_ALLOC_N(cpuwait, virDomainDefGetVcpus(dom->def)) < 0)
>          goto cleanup;

[1]

>  
> +    if (qemuDomainRefreshVcpuHalted(driver, dom, QEMU_ASYNC_JOB_NONE) < 0) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR,
> +                       "%s",
> +                       _("could not refresh CPU states"));
> +        return -1;

This would leak memory allocated just above this hunk.

> +    }
> +

I've fixed the problems mentioned above and tweaked the code to comply
with changes done to previous patches. I've also dropped the reviewed-by
tag since I'll be sending this for review again due to the changes
needed.

Peter




More information about the libvir-list mailing list