|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 4/7] tools: Make init-xenstore-domain use xc_domain_getinfolist()
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@xxxxxxxxx>
---
Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Cc: Wei Liu <wl@xxxxxxx>
Cc: Juergen Gross <jgross@xxxxxxxx>
---
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]))
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 )
{
--
2.34.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |