From 758aea3098fa9e70c3a90defe2a8abb8d7f3d7c0 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Tue, 30 Apr 2013 17:43:07 +0100 Subject: [PATCH] Simplify the Xen domain attach/dettach driver methods Make the domain attach/dettach driver methods directly call into either the XenD or XM drivers Signed-off-by: Daniel P. Berrange --- src/xen/xen_driver.c | 55 ++++++++++++++--------------------------- src/xen/xen_driver.h | 2 -- src/xen/xend_internal.c | 27 ++------------------ src/xen/xend_internal.h | 7 ++++++ src/xen/xm_internal.c | 13 ++-------- src/xen/xm_internal.h | 10 ++++++-- 6 files changed, 38 insertions(+), 76 deletions(-) diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c index 341312da0a..6f779e66b8 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 is_privileged = false; @@ -1408,7 +1407,6 @@ static int xenUnifiedDomainAttachDevice(virDomainPtr dom, const char *xml) { xenUnifiedPrivatePtr priv = dom->conn->privateData; - int i; unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE; /* @@ -1416,14 +1414,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; } @@ -1433,21 +1430,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; /* @@ -1455,16 +1448,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 @@ -1472,25 +1462,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 254c2f52b5..e8c2958221 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 9efe26ec51..39019121c2 100644 --- a/src/xen/xend_internal.c +++ b/src/xen/xend_internal.c @@ -2195,7 +2195,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) @@ -2218,13 +2218,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 && @@ -2378,13 +2371,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 && @@ -2463,7 +2449,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) @@ -2485,13 +2471,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 && @@ -3362,8 +3341,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 4dc97bbe89..4a8578b863 100644 --- a/src/xen/xend_internal.h +++ b/src/xen/xend_internal.h @@ -114,6 +114,13 @@ 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); int xenDaemonDomainUndefine(virDomainPtr domain); diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c index 2785b0b3f0..66bd28942f 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) { @@ -1236,7 +1227,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) @@ -1326,7 +1317,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 2a5d8684e0..eda73948a6 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); @@ -69,4 +67,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 -- GitLab