Message ID | 20230426145932.3340-5-alejandro.vallejo@cloud.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Rationalize usage of xc_domain_getinfo{,list}() | expand |
On 26.04.23 16:59, Alejandro Vallejo wrote: > It currently relies on xc_domain_getinfo() returning the next available > domain past "first_domid", which is a feature that will disappear in a > future patch. > > Furthermore and while at it, make it so the hypercall tries to fetch information > about more than one domain per hypercall so we can (hopefully) get away with a > single hypercall in a typical system. > > Signed-off-by: Alejandro Vallejo <alejandro.vallejo@cloud.com> > --- > Cc: Andrew Cooper <andrew.cooper3@citrix.com> > Cc: Wei Liu <wl@xen.org> > Cc: Juergen Gross <jgross@suse.org> > --- > tools/helpers/init-xenstore-domain.c | 14 +++++++++----- > 1 file changed, 9 insertions(+), 5 deletions(-) > > diff --git a/tools/helpers/init-xenstore-domain.c b/tools/helpers/init-xenstore-domain.c > index 0950ba7dc5..5f40901d31 100644 > --- a/tools/helpers/init-xenstore-domain.c > +++ b/tools/helpers/init-xenstore-domain.c > @@ -21,6 +21,7 @@ > #define LAPIC_BASE_ADDRESS 0xfee00000UL > #define MB(x) ((uint64_t)x << 20) > #define GB(x) ((uint64_t)x << 30) > +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) Please include <xen-tools/common-macros.h> instead of defining ARRAY_SIZE(). With that changed: Reviewed-by: Juergen Gross <jgross@suse.com> Juergen
Ah, I didn't notice that header. Sure, added locally on v2. Cheers, Alejandro On Wed, Apr 26, 2023 at 05:20:01PM +0200, Juergen Gross wrote: > Please include <xen-tools/common-macros.h> instead of defining ARRAY_SIZE(). > > With that changed: > > Reviewed-by: Juergen Gross <jgross@suse.com> > > > Juergen
diff --git a/tools/helpers/init-xenstore-domain.c b/tools/helpers/init-xenstore-domain.c index 0950ba7dc5..5f40901d31 100644 --- a/tools/helpers/init-xenstore-domain.c +++ b/tools/helpers/init-xenstore-domain.c @@ -21,6 +21,7 @@ #define LAPIC_BASE_ADDRESS 0xfee00000UL #define MB(x) ((uint64_t)x << 20) #define GB(x) ((uint64_t)x << 30) +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) static uint32_t domid = ~0; static char *kernel; @@ -322,16 +323,19 @@ err: static int check_domain(xc_interface *xch) { - xc_dominfo_t info; + xc_domaininfo_t info[8]; uint32_t dom; int ret; dom = 1; - while ( (ret = xc_domain_getinfo(xch, dom, 1, &info)) == 1 ) + while ( (ret = xc_domain_getinfolist(xch, dom, ARRAY_SIZE(info), info)) > 0 ) { - if ( info.xenstore ) - return 1; - dom = info.domid + 1; + for ( size_t i = 0; i < ret; i++ ) + { + if ( info[i].flags & XEN_DOMINF_xs_domain ) + return 1; + } + dom = info[ret - 1].domain + 1; } if ( ret < 0 && errno != ESRCH ) {
It currently relies on xc_domain_getinfo() returning the next available domain past "first_domid", which is a feature that will disappear in a future patch. Furthermore and while at it, make it so the hypercall tries to fetch information about more than one domain per hypercall so we can (hopefully) get away with a single hypercall in a typical system. Signed-off-by: Alejandro Vallejo <alejandro.vallejo@cloud.com> --- Cc: Andrew Cooper <andrew.cooper3@citrix.com> Cc: Wei Liu <wl@xen.org> Cc: Juergen Gross <jgross@suse.org> --- tools/helpers/init-xenstore-domain.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)