[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxl: further fixups re LIBXL_DOMAIN_TYPE
# HG changeset patch # User Ian Jackson <ian.jackson@xxxxxxxxxxxxx> # Date 1340905408 -3600 # Node ID 0455d8317631b74c436fd2fadc6dc1c0cc86cb86 # Parent 01a09e818f960c5adac6183ecc7ebfabc42fbfb8 libxl: further fixups re LIBXL_DOMAIN_TYPE * Abolish the macro LIBXL__DOMAIN_IS_TYPE which had incorrect error handling. At every call site, replace it with an open-coded call to 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> --- diff -r 01a09e818f96 -r 0455d8317631 tools/libxl/libxl.c --- a/tools/libxl/libxl.c Thu Jun 28 18:43:28 2012 +0100 +++ b/tools/libxl/libxl.c Thu Jun 28 18:43:28 2012 +0100 @@ -390,7 +390,13 @@ int libxl_domain_resume(libxl_ctx *ctx, 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, @@ -789,7 +795,13 @@ int libxl_domain_unpause(libxl_ctx *ctx, 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")) { @@ -803,6 +815,7 @@ int libxl_domain_unpause(libxl_ctx *ctx, LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "unpausing domain %d", domid); rc = ERROR_FAIL; } + out: GC_FREE; return rc; } @@ -814,7 +827,11 @@ int libxl__domain_pvcontrol_available(li 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); @@ -1214,6 +1231,9 @@ int libxl_domain_destroy(libxl_ctx *ctx, pid = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "/local/domain/%d/image/device-model-pid", domid)); dm_present = (pid != NULL); break; + case LIBXL_DOMAIN_TYPE_INVALID: + rc = ERROR_FAIL; + goto out; default: abort(); } @@ -1363,8 +1383,6 @@ static int libxl__primary_console_find(l case LIBXL_DOMAIN_TYPE_INVALID: rc = ERROR_INVAL; goto out; - default: - abort(); } } diff -r 01a09e818f96 -r 0455d8317631 tools/libxl/libxl_internal.h --- a/tools/libxl/libxl_internal.h Thu Jun 28 18:43:28 2012 +0100 +++ b/tools/libxl/libxl_internal.h Thu Jun 28 18:43:28 2012 +0100 @@ -797,8 +797,7 @@ _hidden int libxl__domain_cpupool(libxl_ _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_ _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 -r 01a09e818f96 -r 0455d8317631 tools/libxl/libxl_pci.c --- a/tools/libxl/libxl_pci.c Thu Jun 28 18:43:28 2012 +0100 +++ b/tools/libxl/libxl_pci.c Thu Jun 28 18:43:28 2012 +0100 @@ -129,7 +129,11 @@ static int libxl__device_pci_add_xenstor 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; } @@ -172,7 +176,11 @@ static int libxl__device_pci_remove_xens 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; @@ -200,7 +208,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; @@ -942,8 +950,8 @@ static int do_pci_add(libxl__gc *gc, uin } break; } - default: - abort(); + case LIBXL_DOMAIN_TYPE_INVALID: + return ERROR_FAIL; } out: if (!libxl_is_stubdom(ctx, domid, NULL)) { _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |