[libvirt] [PATCH] xen: Use internal interfaces in xenDomainUsedCpus

Jim Fehlig jfehlig at suse.com
Tue Aug 6 18:01:35 UTC 2013


Stefan Bader wrote:
> On 05.08.2013 19:52, Jim Fehlig wrote:
>   
>> libvirt typically uses a '*Internal' naming pattern for these types of
>> internal functions, e.g. xenUnifiedDomainGetVcpusFlagsInternal.  Also as
>> we touch this code we should strive to use the libvirt pattern of
>> putting each parameter after the first on a new line when the list of
>> parameters exceeds 80 columns.  Finally, since you added a line after
>> the xenUnifiedNodeGetInfo declaration, we should add one here too.
>>
>>     
> Ok, changed.
>
>   
>> I don't think this comment is necessary.  Instead, just send a follow-up
>> patch :).
>>     
>
> Oh well, it was a kind of reminder, but beside of the "doing it correct" part,
> the current usage is ok as there is no special checking between public and
> private usage which could lock up... :)
>   

Nod.

[...]

> From 47ce666f6a4d91832883341c56f0a55181698e76 Mon Sep 17 00:00:00 2001
> From: Stefan Bader <stefan.bader at canonical.com>
> Date: Mon, 15 Jul 2013 16:03:58 +0200
> Subject: [PATCH] xen: Use internal interfaces in xenDomainUsedCpus
>
> Since commit 95e18efd most public interfaces (xenUnified...) obtain
> a virDomainDefPtr via xenGetDomainDefFor...() which take the unified
> lock.
> This is already taken before calling xenDomainUsedCpus(), so we get
> a deadlock for active guests. Avoid this by splitting up
> xenUnifiedDomainGetVcpusFlags() and xenUnifiedDomainGetVcpus() into
> public and private function calls (which get the virDomainDefPtr passed)
> and use those in xenDomainUsedCpus().
>
>     xenDomainUsedCpus
>       ...
>       nb_vcpu = xenUnifiedDomainGetMaxVcpus(dom);
>         return xenUnifiedDomainGetVcpusFlags(...)
>           ...
>           if (!(def = xenGetDomainDefForDom(dom)))
>             return xenGetDomainDefForUUID(dom->conn, dom->uuid);
>               ...
>               ret = xenHypervisorLookupDomainByUUID(conn, uuid);
>                 ...
>                 xenUnifiedLock(priv);
>                 name = xenStoreDomainGetName(conn, id);
>                 xenUnifiedUnlock(priv);
>       ...
>       if ((ncpus = xenUnifiedDomainGetVcpus(dom, cpuinfo, nb_vcpu,
>         ...
>         if (!(def = xenGetDomainDefForDom(dom)))
>           [again like above]
>
> Signed-off-by: Stefan Bader <stefan.bader at canonical.com>
> ---
>  src/xen/xen_driver.c | 100 +++++++++++++++++++++++++++++++++++----------------
>  src/xen/xen_driver.h |   2 +-
>  2 files changed, 70 insertions(+), 32 deletions(-)
>
> diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
> index 4ae38d3..e1fcbcc 100644
> --- a/src/xen/xen_driver.c
> +++ b/src/xen/xen_driver.c
> @@ -73,12 +73,18 @@
>  
>  static int
>  xenUnifiedNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info);
> +
>  static int
> -xenUnifiedDomainGetMaxVcpus(virDomainPtr dom);
> +xenUnifiedDomainGetVcpusFlagsInternal(virDomainPtr dom,
> +                                      virDomainDefPtr def,
> +                                      unsigned int flags);
>   

Super nit: I added a line between these function declarations for
consistency.  ACK to the patch and now pushed.  Thanks Stefan!

Regards,
Jim




More information about the libvir-list mailing list