提交 758aea30 编写于 作者: D Daniel P. Berrange

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: NDaniel P. Berrange <berrange@redhat.com>
上级 6e661001
...@@ -84,7 +84,6 @@ xenUnifiedDomainGetVcpus(virDomainPtr dom, ...@@ -84,7 +84,6 @@ xenUnifiedDomainGetVcpus(virDomainPtr dom,
static struct xenUnifiedDriver const * const drivers[XEN_UNIFIED_NR_DRIVERS] = { static struct xenUnifiedDriver const * const drivers[XEN_UNIFIED_NR_DRIVERS] = {
[XEN_UNIFIED_HYPERVISOR_OFFSET] = &xenHypervisorDriver, [XEN_UNIFIED_HYPERVISOR_OFFSET] = &xenHypervisorDriver,
[XEN_UNIFIED_XEND_OFFSET] = &xenDaemonDriver, [XEN_UNIFIED_XEND_OFFSET] = &xenDaemonDriver,
[XEN_UNIFIED_XM_OFFSET] = &xenXMDriver,
}; };
static bool is_privileged = false; static bool is_privileged = false;
...@@ -1408,7 +1407,6 @@ static int ...@@ -1408,7 +1407,6 @@ static int
xenUnifiedDomainAttachDevice(virDomainPtr dom, const char *xml) xenUnifiedDomainAttachDevice(virDomainPtr dom, const char *xml)
{ {
xenUnifiedPrivatePtr priv = dom->conn->privateData; xenUnifiedPrivatePtr priv = dom->conn->privateData;
int i;
unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE; unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE;
/* /*
...@@ -1416,14 +1414,13 @@ xenUnifiedDomainAttachDevice(virDomainPtr dom, const char *xml) ...@@ -1416,14 +1414,13 @@ xenUnifiedDomainAttachDevice(virDomainPtr dom, const char *xml)
* config without touching persistent config, we add the extra flag here * config without touching persistent config, we add the extra flag here
* to make this API work * to make this API work
*/ */
if (priv->opened[XEN_UNIFIED_XEND_OFFSET] && if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG; flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG;
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
if (priv->opened[i] && drivers[i]->xenDomainAttachDeviceFlags && return xenXMDomainAttachDeviceFlags(dom, xml, flags);
drivers[i]->xenDomainAttachDeviceFlags(dom, xml, flags) == 0) else
return 0; return xenDaemonAttachDeviceFlags(dom, xml, flags);
return -1; return -1;
} }
...@@ -1433,21 +1430,17 @@ xenUnifiedDomainAttachDeviceFlags(virDomainPtr dom, const char *xml, ...@@ -1433,21 +1430,17 @@ xenUnifiedDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
unsigned int flags) unsigned int flags)
{ {
xenUnifiedPrivatePtr priv = dom->conn->privateData; xenUnifiedPrivatePtr priv = dom->conn->privateData;
int i;
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
if (priv->opened[i] && drivers[i]->xenDomainAttachDeviceFlags && return xenXMDomainAttachDeviceFlags(dom, xml, flags);
drivers[i]->xenDomainAttachDeviceFlags(dom, xml, flags) == 0) else
return 0; return xenDaemonAttachDeviceFlags(dom, xml, flags);
return -1;
} }
static int static int
xenUnifiedDomainDetachDevice(virDomainPtr dom, const char *xml) xenUnifiedDomainDetachDevice(virDomainPtr dom, const char *xml)
{ {
xenUnifiedPrivatePtr priv = dom->conn->privateData; xenUnifiedPrivatePtr priv = dom->conn->privateData;
int i;
unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE; unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE;
/* /*
...@@ -1455,16 +1448,13 @@ xenUnifiedDomainDetachDevice(virDomainPtr dom, const char *xml) ...@@ -1455,16 +1448,13 @@ xenUnifiedDomainDetachDevice(virDomainPtr dom, const char *xml)
* config without touching persistent config, we add the extra flag here * config without touching persistent config, we add the extra flag here
* to make this API work * to make this API work
*/ */
if (priv->opened[XEN_UNIFIED_XEND_OFFSET] && if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG; flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG;
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
if (priv->opened[i] && drivers[i]->xenDomainDetachDeviceFlags && return xenXMDomainDetachDeviceFlags(dom, xml, flags);
drivers[i]->xenDomainDetachDeviceFlags(dom, xml, flags) == 0) else
return 0; return xenDaemonDetachDeviceFlags(dom, xml, flags);
return -1;
} }
static int static int
...@@ -1472,25 +1462,18 @@ xenUnifiedDomainDetachDeviceFlags(virDomainPtr dom, const char *xml, ...@@ -1472,25 +1462,18 @@ xenUnifiedDomainDetachDeviceFlags(virDomainPtr dom, const char *xml,
unsigned int flags) unsigned int flags)
{ {
xenUnifiedPrivatePtr priv = dom->conn->privateData; 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 static int
xenUnifiedDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml, xenUnifiedDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml,
unsigned int flags) unsigned int flags)
{ {
xenUnifiedPrivatePtr priv = dom->conn->privateData; return xenDaemonUpdateDeviceFlags(dom, xml, flags);
if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
return xenDaemonUpdateDeviceFlags(dom, xml, flags);
return -1;
} }
static int static int
......
...@@ -93,8 +93,6 @@ extern int xenRegister (void); ...@@ -93,8 +93,6 @@ extern int xenRegister (void);
* structure with direct calls in xen_unified.c. * structure with direct calls in xen_unified.c.
*/ */
struct xenUnifiedDriver { struct xenUnifiedDriver {
virDrvDomainAttachDeviceFlags xenDomainAttachDeviceFlags;
virDrvDomainDetachDeviceFlags xenDomainDetachDeviceFlags;
virDrvDomainGetSchedulerType xenDomainGetSchedulerType; virDrvDomainGetSchedulerType xenDomainGetSchedulerType;
virDrvDomainGetSchedulerParameters xenDomainGetSchedulerParameters; virDrvDomainGetSchedulerParameters xenDomainGetSchedulerParameters;
virDrvDomainSetSchedulerParameters xenDomainSetSchedulerParameters; virDrvDomainSetSchedulerParameters xenDomainSetSchedulerParameters;
......
...@@ -2195,7 +2195,7 @@ xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc) ...@@ -2195,7 +2195,7 @@ xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc)
* *
* Returns 0 in case of success, -1 in case of failure. * Returns 0 in case of success, -1 in case of failure.
*/ */
static int int
xenDaemonAttachDeviceFlags(virDomainPtr domain, xenDaemonAttachDeviceFlags(virDomainPtr domain,
const char *xml, const char *xml,
unsigned int flags) unsigned int flags)
...@@ -2218,13 +2218,6 @@ xenDaemonAttachDeviceFlags(virDomainPtr domain, ...@@ -2218,13 +2218,6 @@ xenDaemonAttachDeviceFlags(virDomainPtr domain,
_("Cannot modify live config if domain is inactive")); _("Cannot modify live config if domain is inactive"));
return -1; 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 { } else {
/* Only live config can be changed if xendConfigVersion < 3 */ /* Only live config can be changed if xendConfigVersion < 3 */
if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 && if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
...@@ -2378,13 +2371,6 @@ xenDaemonUpdateDeviceFlags(virDomainPtr domain, ...@@ -2378,13 +2371,6 @@ xenDaemonUpdateDeviceFlags(virDomainPtr domain,
_("Cannot modify live config if domain is inactive")); _("Cannot modify live config if domain is inactive"));
return -1; 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 { } else {
/* Only live config can be changed if xendConfigVersion < 3 */ /* Only live config can be changed if xendConfigVersion < 3 */
if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 && if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
...@@ -2463,7 +2449,7 @@ cleanup: ...@@ -2463,7 +2449,7 @@ cleanup:
* *
* Returns 0 in case of success, -1 in case of failure. * Returns 0 in case of success, -1 in case of failure.
*/ */
static int int
xenDaemonDetachDeviceFlags(virDomainPtr domain, xenDaemonDetachDeviceFlags(virDomainPtr domain,
const char *xml, const char *xml,
unsigned int flags) unsigned int flags)
...@@ -2485,13 +2471,6 @@ xenDaemonDetachDeviceFlags(virDomainPtr domain, ...@@ -2485,13 +2471,6 @@ xenDaemonDetachDeviceFlags(virDomainPtr domain,
_("Cannot modify live config if domain is inactive")); _("Cannot modify live config if domain is inactive"));
return -1; 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 { } else {
/* Only live config can be changed if xendConfigVersion < 3 */ /* Only live config can be changed if xendConfigVersion < 3 */
if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 && if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
...@@ -3362,8 +3341,6 @@ xenDaemonDomainBlockPeek(virDomainPtr domain, ...@@ -3362,8 +3341,6 @@ xenDaemonDomainBlockPeek(virDomainPtr domain,
} }
struct xenUnifiedDriver xenDaemonDriver = { struct xenUnifiedDriver xenDaemonDriver = {
.xenDomainAttachDeviceFlags = xenDaemonAttachDeviceFlags,
.xenDomainDetachDeviceFlags = xenDaemonDetachDeviceFlags,
.xenDomainGetSchedulerType = xenDaemonGetSchedulerType, .xenDomainGetSchedulerType = xenDaemonGetSchedulerType,
.xenDomainGetSchedulerParameters = xenDaemonGetSchedulerParameters, .xenDomainGetSchedulerParameters = xenDaemonGetSchedulerParameters,
.xenDomainSetSchedulerParameters = xenDaemonSetSchedulerParameters, .xenDomainSetSchedulerParameters = xenDaemonSetSchedulerParameters,
......
...@@ -114,6 +114,13 @@ int xenDaemonListDefinedDomains(virConnectPtr conn, ...@@ -114,6 +114,13 @@ int xenDaemonListDefinedDomains(virConnectPtr conn,
char **const names, char **const names,
int maxnames); 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); virDomainPtr xenDaemonDomainDefineXML(virConnectPtr xend, const char *sexpr);
int xenDaemonDomainCreate(virDomainPtr domain); int xenDaemonDomainCreate(virDomainPtr domain);
int xenDaemonDomainUndefine(virDomainPtr domain); int xenDaemonDomainUndefine(virDomainPtr domain);
......
...@@ -66,10 +66,6 @@ ...@@ -66,10 +66,6 @@
#define XEN_MAX_PHYSICAL_CPU 1024 #define XEN_MAX_PHYSICAL_CPU 1024
char * xenXMAutoAssignMac(void); 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 #define XM_REFRESH_INTERVAL 10
...@@ -80,11 +76,6 @@ static int xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml, ...@@ -80,11 +76,6 @@ static int xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml,
#define QEMU_IF_SCRIPT "qemu-ifup" #define QEMU_IF_SCRIPT "qemu-ifup"
#define XM_XML_ERROR "Invalid xml" #define XM_XML_ERROR "Invalid xml"
struct xenUnifiedDriver xenXMDriver = {
.xenDomainAttachDeviceFlags = xenXMDomainAttachDeviceFlags,
.xenDomainDetachDeviceFlags = xenXMDomainDetachDeviceFlags,
};
#ifndef WITH_XEN_INOTIFY #ifndef WITH_XEN_INOTIFY
static int xenInotifyActive(virConnectPtr conn ATTRIBUTE_UNUSED) static int xenInotifyActive(virConnectPtr conn ATTRIBUTE_UNUSED)
{ {
...@@ -1236,7 +1227,7 @@ cleanup: ...@@ -1236,7 +1227,7 @@ cleanup:
* *
* Returns 0 in case of success, -1 in case of failure. * Returns 0 in case of success, -1 in case of failure.
*/ */
static int int
xenXMDomainAttachDeviceFlags(virDomainPtr domain, xenXMDomainAttachDeviceFlags(virDomainPtr domain,
const char *xml, const char *xml,
unsigned int flags) unsigned int flags)
...@@ -1326,7 +1317,7 @@ xenXMDomainAttachDeviceFlags(virDomainPtr domain, ...@@ -1326,7 +1317,7 @@ xenXMDomainAttachDeviceFlags(virDomainPtr domain,
* *
* Returns 0 in case of success, -1 in case of failure. * Returns 0 in case of success, -1 in case of failure.
*/ */
static int int
xenXMDomainDetachDeviceFlags(virDomainPtr domain, xenXMDomainDetachDeviceFlags(virDomainPtr domain,
const char *xml, const char *xml,
unsigned int flags) unsigned int flags)
......
...@@ -30,8 +30,6 @@ ...@@ -30,8 +30,6 @@
# include "virconf.h" # include "virconf.h"
# include "domain_conf.h" # include "domain_conf.h"
extern struct xenUnifiedDriver xenXMDriver;
int xenXMConfigCacheRefresh (virConnectPtr conn); int xenXMConfigCacheRefresh (virConnectPtr conn);
int xenXMConfigCacheAddFile(virConnectPtr conn, const char *filename); int xenXMConfigCacheAddFile(virConnectPtr conn, const char *filename);
int xenXMConfigCacheRemoveFile(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 ...@@ -69,4 +67,12 @@ int xenXMDomainBlockPeek (virDomainPtr dom, const char *path, unsigned long long
int xenXMDomainGetAutostart(virDomainPtr dom, int *autostart); int xenXMDomainGetAutostart(virDomainPtr dom, int *autostart);
int xenXMDomainSetAutostart(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 #endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册