All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] add count-only option to DOM0_GETDOMAININFOLIST hypercall
@ 2006-03-23  0:48 Mike D. Day
  2006-03-23  1:19 ` Anthony Liguori
  0 siblings, 1 reply; 3+ messages in thread
From: Mike D. Day @ 2006-03-23  0:48 UTC (permalink / raw)
  To: xen-devel


signed-off-by: Mike D. Day <ncmike@us.ibm.com>

When retreiving a list of domain info structs it would be helpful
to know the current domain count prior to making the hcall. This 
would make it simpler to allocate a return buffer of the 
appropriate size. 

Adding the six lines to the case for the GETDOMAININFOLIST dom0 op
allows the caller to retrieve only the count of the domains. The 
use model is as follows: 

    int number_domains;
    struct dom0_op info;
    info.cmd = DOM0_GETDOMAININFOLIST;
    info.u.getdomaininfolist.max_domains = 0;

    HYPERCALL_dom0_op(&info);

    number_domains = info.u.getdomaininfolist.max_domains;

Having the number of domains, the caller can now allocate
a buffer of the correct size to get the actual domain 
information.    

# HG changeset patch
# User mdday@dual.silverwood.home
# Node ID cd6869742400411fdaf295cc4e0167361e967619
# Parent  5d3c2cb42ec41984cb1e586d3e47a8692eb8b132
modify domain infolist hypercall to optionally return only a count of domains

diff -r 5d3c2cb42ec4 -r cd6869742400 xen/common/dom0_ops.c
--- a/xen/common/dom0_ops.c	Wed Mar 22 19:05:50 2006 +0100
+++ b/xen/common/dom0_ops.c	Wed Mar 22 19:30:28 2006 -0500
@@ -416,6 +416,12 @@ long do_dom0_op(GUEST_HANDLE(dom0_op_t) 
 
         for_each_domain ( d )
         {
+            if (op->u.getdomaininfolist.max_domains == 0) 
+            {
+                num_domains++;
+                continue;
+            }
+                
             if ( d->domain_id < op->u.getdomaininfolist.first_domain )
                 continue;
             if ( num_domains == op->u.getdomaininfolist.max_domains )

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] add count-only option to DOM0_GETDOMAININFOLIST hypercall
  2006-03-23  0:48 [PATCH] add count-only option to DOM0_GETDOMAININFOLIST hypercall Mike D. Day
@ 2006-03-23  1:19 ` Anthony Liguori
  2006-03-23 10:21   ` Mike D. Day
  0 siblings, 1 reply; 3+ messages in thread
From: Anthony Liguori @ 2006-03-23  1:19 UTC (permalink / raw)
  To: ncmike; +Cc: xen-devel

There's a race condition here.  There's no way of knowing that domains 
haven't been destroyed (or created) in between these calls.

Unfortunately, the only way to avoid this is grab them one at a time.

Regards,

Anthony Liguori

Mike D. Day wrote:
> signed-off-by: Mike D. Day <ncmike@us.ibm.com>
>
> When retreiving a list of domain info structs it would be helpful
> to know the current domain count prior to making the hcall. This 
> would make it simpler to allocate a return buffer of the 
> appropriate size. 
>
> Adding the six lines to the case for the GETDOMAININFOLIST dom0 op
> allows the caller to retrieve only the count of the domains. The 
> use model is as follows: 
>
>     int number_domains;
>     struct dom0_op info;
>     info.cmd = DOM0_GETDOMAININFOLIST;
>     info.u.getdomaininfolist.max_domains = 0;
>
>     HYPERCALL_dom0_op(&info);
>
>     number_domains = info.u.getdomaininfolist.max_domains;
>
> Having the number of domains, the caller can now allocate
> a buffer of the correct size to get the actual domain 
> information.    
>
> # HG changeset patch
> # User mdday@dual.silverwood.home
> # Node ID cd6869742400411fdaf295cc4e0167361e967619
> # Parent  5d3c2cb42ec41984cb1e586d3e47a8692eb8b132
> modify domain infolist hypercall to optionally return only a count of domains
>
> diff -r 5d3c2cb42ec4 -r cd6869742400 xen/common/dom0_ops.c
> --- a/xen/common/dom0_ops.c	Wed Mar 22 19:05:50 2006 +0100
> +++ b/xen/common/dom0_ops.c	Wed Mar 22 19:30:28 2006 -0500
> @@ -416,6 +416,12 @@ long do_dom0_op(GUEST_HANDLE(dom0_op_t) 
>  
>          for_each_domain ( d )
>          {
> +            if (op->u.getdomaininfolist.max_domains == 0) 
> +            {
> +                num_domains++;
> +                continue;
> +            }
> +                
>              if ( d->domain_id < op->u.getdomaininfolist.first_domain )
>                  continue;
>              if ( num_domains == op->u.getdomaininfolist.max_domains )
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
>   

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] add count-only option to DOM0_GETDOMAININFOLIST hypercall
  2006-03-23  1:19 ` Anthony Liguori
@ 2006-03-23 10:21   ` Mike D. Day
  0 siblings, 0 replies; 3+ messages in thread
From: Mike D. Day @ 2006-03-23 10:21 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: xen-devel

Anthony Liguori wrote:
> There's a race condition here.  There's no way of knowing that domains 
> haven't been destroyed (or created) in between these calls.
> 
> Unfortunately, the only way to avoid this is grab them one at a time.

The race condition is harmless and the patch is an improvement over the 
current situation where you have to guess the number of domains (and 
hence the size of the buffer you allocate).

Most of the time the caller will be looking for a snapshot of domain 
information, not an up-to-the-instant comprehensive report.

And the pre-existing method of allocating a huge buffer and calling once 
still works.

Mike

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-03-23 10:21 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-03-23  0:48 [PATCH] add count-only option to DOM0_GETDOMAININFOLIST hypercall Mike D. Day
2006-03-23  1:19 ` Anthony Liguori
2006-03-23 10:21   ` Mike D. Day

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.