Daniel P. Berrange wrote: > From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> > > Make the domain attach/dettach driver methods directly call > into either the XenD or XM drivers > > Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> > --- > src/xen/xen_driver.c | 55 +++++++++++++++++-------------------------------- > src/xen/xen_driver.h | 2 -- > src/xen/xend_internal.c | 27 ++---------------------- > src/xen/xend_internal.h | 6 ++++++ > src/xen/xm_internal.c | 13 ++---------- > src/xen/xm_internal.h | 10 +++++++-- > 6 files changed, 37 insertions(+), 76 deletions(-) > ACK. Regards, Jim > diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c > index 6643a97..2262713 100644 > --- a/src/xen/xen_driver.c > +++ b/src/xen/xen_driver.c > @@ -84,7 +84,6 @@ xenUnifiedDomainGetVcpus(virDomainPtr dom, > static struct xenUnifiedDriver const * const drivers[XEN_UNIFIED_NR_DRIVERS] = { > [XEN_UNIFIED_HYPERVISOR_OFFSET] = &xenHypervisorDriver, > [XEN_UNIFIED_XEND_OFFSET] = &xenDaemonDriver, > - [XEN_UNIFIED_XM_OFFSET] = &xenXMDriver, > }; > > static bool inside_daemon = false; > @@ -1397,7 +1396,6 @@ static int > xenUnifiedDomainAttachDevice(virDomainPtr dom, const char *xml) > { > xenUnifiedPrivatePtr priv = dom->conn->privateData; > - int i; > unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE; > > /* > @@ -1405,14 +1403,13 @@ xenUnifiedDomainAttachDevice(virDomainPtr dom, const char *xml) > * config without touching persistent config, we add the extra flag here > * to make this API work > */ > - if (priv->opened[XEN_UNIFIED_XEND_OFFSET] && > - priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4) > + if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4) > flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG; > > - for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) > - if (priv->opened[i] && drivers[i]->xenDomainAttachDeviceFlags && > - drivers[i]->xenDomainAttachDeviceFlags(dom, xml, flags) == 0) > - return 0; > + if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) > + return xenXMDomainAttachDeviceFlags(dom, xml, flags); > + else > + return xenDaemonAttachDeviceFlags(dom, xml, flags); > > return -1; > } > @@ -1422,21 +1419,17 @@ xenUnifiedDomainAttachDeviceFlags(virDomainPtr dom, const char *xml, > unsigned int flags) > { > xenUnifiedPrivatePtr priv = dom->conn->privateData; > - int i; > > - for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) > - if (priv->opened[i] && drivers[i]->xenDomainAttachDeviceFlags && > - drivers[i]->xenDomainAttachDeviceFlags(dom, xml, flags) == 0) > - return 0; > - > - return -1; > + if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) > + return xenXMDomainAttachDeviceFlags(dom, xml, flags); > + else > + return xenDaemonAttachDeviceFlags(dom, xml, flags); > } > > static int > xenUnifiedDomainDetachDevice(virDomainPtr dom, const char *xml) > { > xenUnifiedPrivatePtr priv = dom->conn->privateData; > - int i; > unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE; > > /* > @@ -1444,16 +1437,13 @@ xenUnifiedDomainDetachDevice(virDomainPtr dom, const char *xml) > * config without touching persistent config, we add the extra flag here > * to make this API work > */ > - if (priv->opened[XEN_UNIFIED_XEND_OFFSET] && > - priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4) > + if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4) > flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG; > > - for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) > - if (priv->opened[i] && drivers[i]->xenDomainDetachDeviceFlags && > - drivers[i]->xenDomainDetachDeviceFlags(dom, xml, flags) == 0) > - return 0; > - > - return -1; > + if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) > + return xenXMDomainDetachDeviceFlags(dom, xml, flags); > + else > + return xenDaemonDetachDeviceFlags(dom, xml, flags); > } > > static int > @@ -1461,25 +1451,18 @@ xenUnifiedDomainDetachDeviceFlags(virDomainPtr dom, const char *xml, > unsigned int flags) > { > xenUnifiedPrivatePtr priv = dom->conn->privateData; > - int i; > - > - for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) > - if (priv->opened[i] && drivers[i]->xenDomainDetachDeviceFlags && > - drivers[i]->xenDomainDetachDeviceFlags(dom, xml, flags) == 0) > - return 0; > > - return -1; > + if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) > + return xenXMDomainDetachDeviceFlags(dom, xml, flags); > + else > + return xenDaemonDetachDeviceFlags(dom, xml, flags); > } > > static int > xenUnifiedDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml, > unsigned int flags) > { > - xenUnifiedPrivatePtr priv = dom->conn->privateData; > - > - if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) > - return xenDaemonUpdateDeviceFlags(dom, xml, flags); > - return -1; > + return xenDaemonUpdateDeviceFlags(dom, xml, flags); > } > > static int > diff --git a/src/xen/xen_driver.h b/src/xen/xen_driver.h > index 254c2f5..e8c2958 100644 > --- a/src/xen/xen_driver.h > +++ b/src/xen/xen_driver.h > @@ -93,8 +93,6 @@ extern int xenRegister (void); > * structure with direct calls in xen_unified.c. > */ > struct xenUnifiedDriver { > - virDrvDomainAttachDeviceFlags xenDomainAttachDeviceFlags; > - virDrvDomainDetachDeviceFlags xenDomainDetachDeviceFlags; > virDrvDomainGetSchedulerType xenDomainGetSchedulerType; > virDrvDomainGetSchedulerParameters xenDomainGetSchedulerParameters; > virDrvDomainSetSchedulerParameters xenDomainSetSchedulerParameters; > diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c > index f9b43b8..49ef256 100644 > --- a/src/xen/xend_internal.c > +++ b/src/xen/xend_internal.c > @@ -2196,7 +2196,7 @@ xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc) > * > * Returns 0 in case of success, -1 in case of failure. > */ > -static int > +int > xenDaemonAttachDeviceFlags(virDomainPtr domain, > const char *xml, > unsigned int flags) > @@ -2219,13 +2219,6 @@ xenDaemonAttachDeviceFlags(virDomainPtr domain, > _("Cannot modify live config if domain is inactive")); > return -1; > } > - /* If xendConfigVersion < 3 only live config can be changed */ > - if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) { > - virReportError(VIR_ERR_OPERATION_INVALID, "%s", > - _("Xend version does not support modifying " > - "persistent config")); > - return -1; > - } > } else { > /* Only live config can be changed if xendConfigVersion < 3 */ > if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 && > @@ -2379,13 +2372,6 @@ xenDaemonUpdateDeviceFlags(virDomainPtr domain, > _("Cannot modify live config if domain is inactive")); > return -1; > } > - /* If xendConfigVersion < 3 only live config can be changed */ > - if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) { > - virReportError(VIR_ERR_OPERATION_INVALID, "%s", > - _("Xend version does not support modifying " > - "persistent config")); > - return -1; > - } > } else { > /* Only live config can be changed if xendConfigVersion < 3 */ > if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 && > @@ -2464,7 +2450,7 @@ cleanup: > * > * Returns 0 in case of success, -1 in case of failure. > */ > -static int > +int > xenDaemonDetachDeviceFlags(virDomainPtr domain, > const char *xml, > unsigned int flags) > @@ -2486,13 +2472,6 @@ xenDaemonDetachDeviceFlags(virDomainPtr domain, > _("Cannot modify live config if domain is inactive")); > return -1; > } > - /* If xendConfigVersion < 3 only live config can be changed */ > - if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) { > - virReportError(VIR_ERR_OPERATION_INVALID, "%s", > - _("Xend version does not support modifying " > - "persistent config")); > - return -1; > - } > } else { > /* Only live config can be changed if xendConfigVersion < 3 */ > if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 && > @@ -3353,8 +3332,6 @@ xenDaemonDomainBlockPeek(virDomainPtr domain, > } > > struct xenUnifiedDriver xenDaemonDriver = { > - .xenDomainAttachDeviceFlags = xenDaemonAttachDeviceFlags, > - .xenDomainDetachDeviceFlags = xenDaemonDetachDeviceFlags, > .xenDomainGetSchedulerType = xenDaemonGetSchedulerType, > .xenDomainGetSchedulerParameters = xenDaemonGetSchedulerParameters, > .xenDomainSetSchedulerParameters = xenDaemonSetSchedulerParameters, > diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h > index d773ef9..4a8578b 100644 > --- a/src/xen/xend_internal.h > +++ b/src/xen/xend_internal.h > @@ -114,6 +114,12 @@ int xenDaemonListDefinedDomains(virConnectPtr conn, > char **const names, > int maxnames); > > +int xenDaemonAttachDeviceFlags(virDomainPtr domain, > + const char *xml, > + unsigned int flags); > +int xenDaemonDetachDeviceFlags(virDomainPtr domain, > + const char *xml, > + unsigned int flags); > > virDomainPtr xenDaemonDomainDefineXML(virConnectPtr xend, const char *sexpr); > int xenDaemonDomainCreate(virDomainPtr domain); > diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c > index bb79c63..fa0392b 100644 > --- a/src/xen/xm_internal.c > +++ b/src/xen/xm_internal.c > @@ -66,10 +66,6 @@ > #define XEN_MAX_PHYSICAL_CPU 1024 > > char * xenXMAutoAssignMac(void); > -static int xenXMDomainAttachDeviceFlags(virDomainPtr domain, const char *xml, > - unsigned int flags); > -static int xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml, > - unsigned int flags); > > #define XM_REFRESH_INTERVAL 10 > > @@ -80,11 +76,6 @@ static int xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml, > #define QEMU_IF_SCRIPT "qemu-ifup" > #define XM_XML_ERROR "Invalid xml" > > -struct xenUnifiedDriver xenXMDriver = { > - .xenDomainAttachDeviceFlags = xenXMDomainAttachDeviceFlags, > - .xenDomainDetachDeviceFlags = xenXMDomainDetachDeviceFlags, > -}; > - > #ifndef WITH_XEN_INOTIFY > static int xenInotifyActive(virConnectPtr conn ATTRIBUTE_UNUSED) > { > @@ -1241,7 +1232,7 @@ cleanup: > * > * Returns 0 in case of success, -1 in case of failure. > */ > -static int > +int > xenXMDomainAttachDeviceFlags(virDomainPtr domain, > const char *xml, > unsigned int flags) > @@ -1331,7 +1322,7 @@ xenXMDomainAttachDeviceFlags(virDomainPtr domain, > * > * Returns 0 in case of success, -1 in case of failure. > */ > -static int > +int > xenXMDomainDetachDeviceFlags(virDomainPtr domain, > const char *xml, > unsigned int flags) > diff --git a/src/xen/xm_internal.h b/src/xen/xm_internal.h > index 257b663..731a126 100644 > --- a/src/xen/xm_internal.h > +++ b/src/xen/xm_internal.h > @@ -30,8 +30,6 @@ > # include "virconf.h" > # include "domain_conf.h" > > -extern struct xenUnifiedDriver xenXMDriver; > - > int xenXMConfigCacheRefresh (virConnectPtr conn); > int xenXMConfigCacheAddFile(virConnectPtr conn, const char *filename); > int xenXMConfigCacheRemoveFile(virConnectPtr conn, const char *filename); > @@ -70,4 +68,12 @@ int xenXMDomainBlockPeek (virDomainPtr dom, const char *path, unsigned long long > int xenXMDomainGetAutostart(virDomainPtr dom, int *autostart); > int xenXMDomainSetAutostart(virDomainPtr dom, int autostart); > > +int xenXMDomainAttachDeviceFlags(virDomainPtr domain, > + const char *xml, > + unsigned int flags); > + > +int xenXMDomainDetachDeviceFlags(virDomainPtr domain, > + const char *xml, > + unsigned int flags); > + > #endif > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list