|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 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..e210a2677e 100644
--- a/tools/helpers/init-xenstore-domain.c
+++ b/tools/helpers/init-xenstore-domain.c
@@ -13,6 +13,7 @@
#include <xentoollog.h>
#include <libxl.h>
#include <xen/sys/xenbus_dev.h>
+#include <xen-tools/common-macros.h>
#include <xen-xsm/flask/flask.h>
#include <xen/io/xenbus.h>
@@ -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 |