On Wed, 2014-06-25 at 18:09 -0600, Jim Fehlig wrote: > libxl does not support save, restore, or migrate on all architectures, > notably ARM. Detect whether libxl supports these operations using > LIBXL_HAVE_NO_SUSPEND_RESUME. If not supported, drop advertisement of > <migration_features>. > > Found by Ian Campbell while improving Xen's OSSTEST infrastructure > > http://lists.xen.org/archives/html/xen-devel/2014-06/msg02171.html > Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxx> > --- > > Another option for > > https://www.redhat.com/archives/libvir-list/2014-June/msg01276.html > > With this one, we even avoid the distasteful double negative :). > > Compile-tested on x86 only at this point. The ARM build is still > slowly grinding away... Build and runtime tested on ARM and x86 here, works fine. Thanks! Ian. > > src/libxl/libxl_conf.c | 4 ++++ > src/libxl/libxl_driver.c | 35 +++++++++++++++++++++++++++++++++++ > 2 files changed, 39 insertions(+) > > diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c > index 4b6b5c0..8eeaf82 100644 > --- a/src/libxl/libxl_conf.c > +++ b/src/libxl/libxl_conf.c > @@ -1340,7 +1340,11 @@ libxlMakeCapabilities(libxl_ctx *ctx) > { > virCapsPtr caps; > > +#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME > + if ((caps = virCapabilitiesNew(virArchFromHost(), 0, 0)) == NULL) > +#else > if ((caps = virCapabilitiesNew(virArchFromHost(), 1, 1)) == NULL) > +#endif > return NULL; > > if (libxlCapsInitHost(ctx, caps) < 0) > diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c > index 1ea99e2..646c9b9 100644 > --- a/src/libxl/libxl_driver.c > +++ b/src/libxl/libxl_driver.c > @@ -1379,6 +1379,11 @@ libxlDomainSaveFlags(virDomainPtr dom, const char *to, const char *dxml, > int ret = -1; > bool remove_dom = false; > > +#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME > + virReportUnsupportedError(); > + return -1; > +#endif > + > virCheckFlags(0, -1); > if (dxml) { > virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", > @@ -1440,6 +1445,11 @@ libxlDomainRestoreFlags(virConnectPtr conn, const char *from, > int fd = -1; > int ret = -1; > > +#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME > + virReportUnsupportedError(); > + return -1; > +#endif > + > virCheckFlags(VIR_DOMAIN_SAVE_PAUSED, -1); > if (dxml) { > virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", > @@ -4351,6 +4361,11 @@ libxlDomainMigrateBegin3Params(virDomainPtr domain, > const char *xmlin = NULL; > virDomainObjPtr vm = NULL; > > +#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME > + virReportUnsupportedError(); > + return NULL; > +#endif > + > virCheckFlags(LIBXL_MIGRATION_FLAGS, NULL); > if (virTypedParamsValidate(params, nparams, LIBXL_MIGRATION_PARAMETERS) < 0) > return NULL; > @@ -4395,6 +4410,11 @@ libxlDomainMigratePrepare3Params(virConnectPtr dconn, > const char *dname = NULL; > const char *uri_in = NULL; > > +#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME > + virReportUnsupportedError(); > + return -1; > +#endif > + > virCheckFlags(LIBXL_MIGRATION_FLAGS, -1); > if (virTypedParamsValidate(params, nparams, LIBXL_MIGRATION_PARAMETERS) < 0) > goto error; > @@ -4445,6 +4465,11 @@ libxlDomainMigratePerform3Params(virDomainPtr dom, > const char *uri = NULL; > int ret = -1; > > +#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME > + virReportUnsupportedError(); > + return -1; > +#endif > + > virCheckFlags(LIBXL_MIGRATION_FLAGS, -1); > if (virTypedParamsValidate(params, nparams, LIBXL_MIGRATION_PARAMETERS) < 0) > goto cleanup; > @@ -4497,6 +4522,11 @@ libxlDomainMigrateFinish3Params(virConnectPtr dconn, > virDomainObjPtr vm = NULL; > const char *dname = NULL; > > +#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME > + virReportUnsupportedError(); > + return NULL; > +#endif > + > virCheckFlags(LIBXL_MIGRATION_FLAGS, NULL); > if (virTypedParamsValidate(params, nparams, LIBXL_MIGRATION_PARAMETERS) < 0) > return NULL; > @@ -4545,6 +4575,11 @@ libxlDomainMigrateConfirm3Params(virDomainPtr domain, > libxlDriverPrivatePtr driver = domain->conn->privateData; > virDomainObjPtr vm = NULL; > > +#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME > + virReportUnsupportedError(); > + return -1; > +#endif > + > virCheckFlags(LIBXL_MIGRATION_FLAGS, -1); > if (virTypedParamsValidate(params, nparams, LIBXL_MIGRATION_PARAMETERS) < 0) > return -1; -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list