[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 20/21] libxl: further fixups re LIBXL_DOMAIN_TYPE
On Fri, 2012-06-15 at 12:54 +0100, Ian Jackson wrote: > * Abolish the macro LIBXL__DOMAIN_IS_TYPE which had incorrect error > handlng. At every call site, replace it with an open-coded call to handling > libxl_domain_type and check against LIBXL_DOMAIN_TYPE_INVALID. > > * This involves adding an `out:' to libxl_domain_unpause. > > * In libxl_domain_destroy and do_pci_add, do not `default: abort();' > if the domain type cannot be found. Instead switch on > LIBXL_DOMAIN_TYPE_INVALID specifically and do some actual error > handling. > > * In libxl__primary_console_find, remove a spurious default clause > from the domain type switch. > > Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > > Changes in v4 of series: > * Hunk > In libxl_domain_suspend (as reorganised) error check, check for > LIBXL_DOMAIN_TYPE_INVALID and remove a pointless extra log message. > merged into the earlier patch where the slightly-wrong code was > introduced. > --- > tools/libxl/libxl.c | 30 +++++++++++++++++++++++------- > tools/libxl/libxl_internal.h | 5 +++-- > tools/libxl/libxl_pci.c | 18 +++++++++++++----- > 3 files changed, 39 insertions(+), 14 deletions(-) > > diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c > index d3b017b..cd2dbda 100644 > --- a/tools/libxl/libxl.c > +++ b/tools/libxl/libxl.c > @@ -390,7 +390,13 @@ int libxl_domain_resume(libxl_ctx *ctx, uint32_t domid, > int suspend_cancel) > goto out; > } > > - if (LIBXL__DOMAIN_IS_TYPE(gc, domid, HVM)) { > + libxl_domain_type type = libxl__domain_type(gc, domid); > + if (type == LIBXL_DOMAIN_TYPE_INVALID) { > + rc = ERROR_FAIL; > + goto out; > + } > + > + if (type == LIBXL_DOMAIN_TYPE_HVM) { > rc = libxl__domain_resume_device_model(gc, domid); > if (rc) { > LIBXL__LOG(ctx, LIBXL__LOG_ERROR, > @@ -788,7 +794,13 @@ int libxl_domain_unpause(libxl_ctx *ctx, uint32_t domid) > char *state; > int ret, rc = 0; > > - if (LIBXL__DOMAIN_IS_TYPE(gc, domid, HVM)) { > + libxl_domain_type type = libxl__domain_type(gc, domid); > + if (type == LIBXL_DOMAIN_TYPE_INVALID) { > + rc = ERROR_FAIL; > + goto out; > + } > + > + if (type == LIBXL_DOMAIN_TYPE_HVM) { > path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/state", > domid); > state = libxl__xs_read(gc, XBT_NULL, path); > if (state != NULL && !strcmp(state, "paused")) { > @@ -802,6 +814,7 @@ int libxl_domain_unpause(libxl_ctx *ctx, uint32_t domid) > LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "unpausing domain %d", > domid); > rc = ERROR_FAIL; > } > + out: > GC_FREE; > return rc; > } > @@ -813,7 +826,11 @@ int libxl__domain_pvcontrol_available(libxl__gc *gc, > uint32_t domid) > unsigned long pvdriver = 0; > int ret; > > - if (LIBXL__DOMAIN_IS_TYPE(gc, domid, PV)) > + libxl_domain_type domtype = libxl__domain_type(gc, domid); > + if (domtype == LIBXL_DOMAIN_TYPE_INVALID) > + return ERROR_FAIL; > + > + if (domtype == LIBXL_DOMAIN_TYPE_PV) > return 1; > > ret = xc_get_hvm_param(ctx->xch, domid, HVM_PARAM_CALLBACK_IRQ, > &pvdriver); > @@ -1213,8 +1230,9 @@ int libxl_domain_destroy(libxl_ctx *ctx, uint32_t domid) > pid = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, > "/local/domain/%d/image/device-model-pid", domid)); > dm_present = (pid != NULL); > break; > - default: > - abort(); > + case LIBXL_DOMAIN_TYPE_INVALID: > + rc = ERROR_FAIL; > + goto out; > } > > dom_path = libxl__xs_get_dompath(gc, domid); > @@ -1362,8 +1380,6 @@ static int libxl__primary_console_find(libxl_ctx *ctx, > uint32_t domid_vm, > case LIBXL_DOMAIN_TYPE_INVALID: > rc = ERROR_INVAL; > goto out; > - default: > - abort(); > } > } > > diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h > index 9df0db5..36c75ed 100644 > --- a/tools/libxl/libxl_internal.h > +++ b/tools/libxl/libxl_internal.h > @@ -797,8 +797,7 @@ _hidden int libxl__domain_cpupool(libxl__gc *gc, uint32_t > domid); > _hidden libxl_scheduler libxl__domain_scheduler(libxl__gc *gc, uint32_t > domid); > _hidden int libxl__sched_set_params(libxl__gc *gc, uint32_t domid, > libxl_domain_sched_params *scparams); > -#define LIBXL__DOMAIN_IS_TYPE(gc, domid, type) \ > - libxl__domain_type((gc), (domid)) == LIBXL_DOMAIN_TYPE_##type > + > typedef struct { > uint32_t store_port; > uint32_t store_domid; > @@ -841,7 +840,9 @@ _hidden int libxl__domain_resume_device_model(libxl__gc > *gc, uint32_t domid); > > _hidden void libxl__userdata_destroyall(libxl__gc *gc, uint32_t domid); > > +/* returns 0 or 1, or a libxl error code */ > _hidden int libxl__domain_pvcontrol_available(libxl__gc *gc, uint32_t domid); > + > _hidden char * libxl__domain_pvcontrol_read(libxl__gc *gc, > xs_transaction_t t, uint32_t > domid); > _hidden int libxl__domain_pvcontrol_write(libxl__gc *gc, xs_transaction_t t, > diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c > index de1b79f..81438be 100644 > --- a/tools/libxl/libxl_pci.c > +++ b/tools/libxl/libxl_pci.c > @@ -128,7 +128,11 @@ static int libxl__device_pci_add_xenstore(libxl__gc *gc, > uint32_t domid, libxl_d > if (!num_devs) > return libxl__create_pci_backend(gc, domid, pcidev, 1); > > - if (!starting && LIBXL__DOMAIN_IS_TYPE(gc, domid, PV)) { > + libxl_domain_type domtype = libxl__domain_type(gc, domid); > + if (domtype == LIBXL_DOMAIN_TYPE_INVALID) > + return ERROR_FAIL; > + > + if (!starting && domtype == LIBXL_DOMAIN_TYPE_PV) { > if (libxl__wait_for_backend(gc, be_path, "4") < 0) > return ERROR_FAIL; > } > @@ -171,7 +175,11 @@ static int libxl__device_pci_remove_xenstore(libxl__gc > *gc, uint32_t domid, libx > return ERROR_INVAL; > num = atoi(num_devs); > > - if (LIBXL__DOMAIN_IS_TYPE(gc, domid, PV)) { > + libxl_domain_type domtype = libxl__domain_type(gc, domid); > + if (domtype == LIBXL_DOMAIN_TYPE_INVALID) > + return ERROR_FAIL; > + > + if (domtype == LIBXL_DOMAIN_TYPE_PV) { > if (libxl__wait_for_backend(gc, be_path, "4") < 0) { > LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "pci backend at %s is not > ready", be_path); > return ERROR_FAIL; > @@ -199,7 +207,7 @@ retry_transaction: > if (errno == EAGAIN) > goto retry_transaction; > > - if (LIBXL__DOMAIN_IS_TYPE(gc, domid, PV)) { > + if (domtype == LIBXL_DOMAIN_TYPE_PV) { > if (libxl__wait_for_backend(gc, be_path, "4") < 0) { > LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "pci backend at %s is not > ready", be_path); > return ERROR_FAIL; > @@ -939,8 +947,8 @@ static int do_pci_add(libxl__gc *gc, uint32_t domid, > libxl_device_pci *pcidev, i > } > break; > } > - default: > - abort(); > + case LIBXL_DOMAIN_TYPE_INVALID: > + return ERROR_FAIL; > } > out: > if (!libxl_is_stubdom(ctx, domid, NULL)) { _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |