init-dom0less passes the assorted xen library handles from main downward. This is a little excessive in places with 4 handles passed into configure_xenstore().
Replace the handle passing with file-scoped variables. The xenstore helpers are not changed. This keeps their implementation common with the libxenstore functions that take a handle, transation, and then additional arguments. Suggested-by: Juergen Gross <jgr...@suse.com> Signed-off-by: Jason Andryuk <jason.andr...@amd.com> --- v3: New --- tools/helpers/init-dom0less.c | 37 +++++++++++++++-------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/tools/helpers/init-dom0less.c b/tools/helpers/init-dom0less.c index a182dce563..0b0be08449 100644 --- a/tools/helpers/init-dom0less.c +++ b/tools/helpers/init-dom0less.c @@ -18,8 +18,12 @@ #define XENSTORE_PFN_OFFSET 1 #define STR_MAX_LENGTH 128 -static int alloc_xs_page(struct xc_interface_core *xch, - libxl_dominfo *info, +static libxl_ctx *ctx; +static struct xs_handle *xsh; +static struct xc_interface_core *xch; +static xenforeignmemory_handle *xfh; + +static int alloc_xs_page(libxl_dominfo *info, uint64_t *xenstore_pfn) { int rc; @@ -43,8 +47,7 @@ static int alloc_xs_page(struct xc_interface_core *xch, return 0; } -static int get_xs_page(struct xc_interface_core *xch, libxl_dominfo *info, - uint64_t *xenstore_pfn) +static int get_xs_page(libxl_dominfo *info, uint64_t *xenstore_pfn) { int rc; @@ -111,8 +114,7 @@ static bool do_xs_write_vm(struct xs_handle *xsh, xs_transaction_t t, * The list was retrieved by running xenstore-ls on a corresponding * domain started by xl/libxl. */ -static int create_xenstore(struct xs_handle *xsh, - libxl_dominfo *info, libxl_uuid uuid, +static int create_xenstore(libxl_dominfo *info, libxl_uuid uuid, uint64_t xenstore_pfn, evtchn_port_t xenstore_port) { @@ -235,10 +237,7 @@ err: return rc; } -static int init_domain(struct xs_handle *xsh, - struct xc_interface_core *xch, - xenforeignmemory_handle *xfh, - libxl_dominfo *info) +static int init_domain(libxl_dominfo *info) { libxl_uuid uuid; uint64_t xenstore_evtchn, xenstore_pfn; @@ -258,13 +257,13 @@ static int init_domain(struct xs_handle *xsh, return 0; /* Get xenstore page */ - if (get_xs_page(xch, info, &xenstore_pfn) != 0) + if (get_xs_page(info, &xenstore_pfn) != 0) return 1; if (xenstore_pfn == ~0ULL) { struct xenstore_domain_interface *intf; - rc = alloc_xs_page(xch, info, &xenstore_pfn); + rc = alloc_xs_page(info, &xenstore_pfn); if (rc != 0) { printf("Error on getting xenstore page\n"); return 1; @@ -299,7 +298,7 @@ static int init_domain(struct xs_handle *xsh, if (rc) err(1, "gen_stub_json_config"); - rc = create_xenstore(xsh, info, uuid, xenstore_pfn, xenstore_evtchn); + rc = create_xenstore(info, uuid, xenstore_pfn, xenstore_evtchn); if (rc) err(1, "writing to xenstore"); @@ -310,7 +309,7 @@ static int init_domain(struct xs_handle *xsh, } /* Check if domain has been configured in XS */ -static bool domain_exists(struct xs_handle *xsh, int domid) +static bool domain_exists(int domid) { return xs_is_domain_introduced(xsh, domid); } @@ -318,11 +317,7 @@ static bool domain_exists(struct xs_handle *xsh, int domid) int main(int argc, char **argv) { libxl_dominfo *info = NULL; - libxl_ctx *ctx; int nb_vm = 0, rc = 0, i; - struct xs_handle *xsh = NULL; - struct xc_interface_core *xch = NULL; - xenforeignmemory_handle *xfh = NULL; /* TODO reuse libxl xsh connection */ xsh = xs_open(0); @@ -355,9 +350,9 @@ int main(int argc, char **argv) continue; printf("Checking domid: %u\n", domid); - if (!domain_exists(xsh, domid)) { - rc = init_domain(xsh, xch, xfh, &info[i]); - if (rc < 0) { + if (!domain_exists(domid)) { + rc = init_domain(&info[i]); + if (rc) { fprintf(stderr, "init_domain failed.\n"); goto out; } -- 2.50.1