From: "Daniel P. Berrange" <berrange(a)redhat.com>
Make the domain attach/dettach driver methods directly call
into either the XenD or XM drivers
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
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(-)
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
--
1.8.1.4