[libvirt] [PATCH 18/40] Simplify the Xen domain get info/state driver methods
Jim Fehlig
jfehlig at suse.com
Tue May 7 20:53:17 UTC 2013
Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
>
> Make the xenUnifiedDomainGetInfo and xenUnifiedDomainGetState drivers
> call the correct sub-driver APIs directly.
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
> src/xen/xen_driver.c | 52 +++++++--------------
> src/xen/xen_driver.h | 1 -
> src/xen/xen_hypervisor.c | 14 +-----
> src/xen/xen_hypervisor.h | 3 +-
> src/xen/xend_internal.c | 15 +------
> src/xen/xend_internal.h | 3 +-
> src/xen/xm_internal.c | 15 ++-----
> src/xen/xm_internal.h | 3 +-
> src/xen/xs_internal.c | 115 -----------------------------------------------
> src/xen/xs_internal.h | 9 ----
> 10 files changed, 23 insertions(+), 207 deletions(-)
>
> diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
> index 7d09c6b..988dbce 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_XS_OFFSET] = &xenStoreDriver,
> [XEN_UNIFIED_XM_OFFSET] = &xenXMDriver,
> };
>
The comment for this structure states "The five Xen drivers below us".
Now down to three, maybe down to zero by the end of this series :).
ACK.
Regards,
Jim
>
> @@ -842,15 +841,15 @@ static int
> xenUnifiedDomainGetInfo(virDomainPtr dom, virDomainInfoPtr info)
> {
> xenUnifiedPrivatePtr priv = dom->conn->privateData;
> - int i;
> -
> - for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
> - if (priv->opened[i] &&
> - drivers[i]->xenDomainGetInfo &&
> - drivers[i]->xenDomainGetInfo(dom, info) == 0)
> - return 0;
>
> - return -1;
> + if (dom->id < 0) {
> + if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
> + return xenXMDomainGetInfo(dom, info);
> + else
> + return xenDaemonDomainGetInfo(dom, info);
> + } else {
> + return xenHypervisorGetDomainInfo(dom, info);
> + }
> }
>
> static int
> @@ -860,38 +859,17 @@ xenUnifiedDomainGetState(virDomainPtr dom,
> unsigned int flags)
> {
> xenUnifiedPrivatePtr priv = dom->conn->privateData;
> - int ret;
>
> virCheckFlags(0, -1);
>
> - /* trying drivers in the same order as GetInfo for consistent results:
> - * hypervisor, xend, xs, and xm */
> -
> - if (priv->opened[XEN_UNIFIED_HYPERVISOR_OFFSET]) {
> - ret = xenHypervisorGetDomainState(dom, state, reason, flags);
> - if (ret >= 0)
> - return ret;
> - }
> -
> - if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) {
> - ret = xenDaemonDomainGetState(dom, state, reason, flags);
> - if (ret >= 0)
> - return ret;
> - }
> -
> - if (priv->opened[XEN_UNIFIED_XS_OFFSET]) {
> - ret = xenStoreDomainGetState(dom, state, reason, flags);
> - if (ret >= 0)
> - return ret;
> - }
> -
> - if (priv->opened[XEN_UNIFIED_XM_OFFSET]) {
> - ret = xenXMDomainGetState(dom, state, reason, flags);
> - if (ret >= 0)
> - return ret;
> + if (dom->id < 0) {
> + if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
> + return xenXMDomainGetState(dom, state, reason);
> + else
> + return xenDaemonDomainGetState(dom, state, reason);
> + } else {
> + return xenHypervisorGetDomainState(dom, state, reason);
> }
> -
> - return -1;
> }
>
> static int
> diff --git a/src/xen/xen_driver.h b/src/xen/xen_driver.h
> index 4509161..953da64 100644
> --- a/src/xen/xen_driver.h
> +++ b/src/xen/xen_driver.h
> @@ -93,7 +93,6 @@ extern int xenRegister (void);
> * structure with direct calls in xen_unified.c.
> */
> struct xenUnifiedDriver {
> - virDrvDomainGetInfo xenDomainGetInfo;
> virDrvDomainPinVcpu xenDomainPinVcpu;
> virDrvDomainGetVcpus xenDomainGetVcpus;
> virDrvConnectListDefinedDomains xenListDefinedDomains;
> diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c
> index 7662843..5735b0b 100644
> --- a/src/xen/xen_hypervisor.c
> +++ b/src/xen/xen_hypervisor.c
> @@ -871,7 +871,6 @@ typedef struct xen_op_v2_dom xen_op_v2_dom;
> #endif
>
> struct xenUnifiedDriver xenHypervisorDriver = {
> - .xenDomainGetInfo = xenHypervisorGetDomainInfo,
> .xenDomainPinVcpu = xenHypervisorPinVcpu,
> .xenDomainGetVcpus = xenHypervisorGetVcpus,
> .xenDomainGetSchedulerType = xenHypervisorGetSchedulerType,
> @@ -2880,11 +2879,7 @@ xenHypervisorGetDomInfo(virConnectPtr conn, int id, virDomainInfoPtr info)
> int
> xenHypervisorGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info)
> {
> - if (domain->id < 0)
> - return -1;
> -
> return xenHypervisorGetDomInfo(domain->conn, domain->id, info);
> -
> }
>
> /**
> @@ -2892,7 +2887,6 @@ xenHypervisorGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info)
> * @domain: pointer to the domain block
> * @state: returned state of the domain
> * @reason: returned reason for the state
> - * @flags: additional flags, 0 for now
> *
> * Do a hypervisor call to get the related set of domain information.
> *
> @@ -2901,16 +2895,10 @@ xenHypervisorGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info)
> int
> xenHypervisorGetDomainState(virDomainPtr domain,
> int *state,
> - int *reason,
> - unsigned int flags)
> + int *reason)
> {
> virDomainInfo info;
>
> - virCheckFlags(0, -1);
> -
> - if (domain->id < 0)
> - return -1;
> -
> if (xenHypervisorGetDomInfo(domain->conn, domain->id, &info) < 0)
> return -1;
>
> diff --git a/src/xen/xen_hypervisor.h b/src/xen/xen_hypervisor.h
> index 9748cf8..b36fcca 100644
> --- a/src/xen/xen_hypervisor.h
> +++ b/src/xen/xen_hypervisor.h
> @@ -76,8 +76,7 @@ int xenHypervisorGetDomainInfo (virDomainPtr domain,
> ATTRIBUTE_NONNULL (1);
> int xenHypervisorGetDomainState (virDomainPtr domain,
> int *state,
> - int *reason,
> - unsigned int flags)
> + int *reason)
> ATTRIBUTE_NONNULL (1);
> int xenHypervisorGetDomInfo (virConnectPtr conn,
> int id,
> diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
> index ce7d3f6..d6a3698 100644
> --- a/src/xen/xend_internal.c
> +++ b/src/xen/xend_internal.c
> @@ -1648,10 +1648,6 @@ xenDaemonDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
> {
> struct sexpr *root;
> int ret;
> - xenUnifiedPrivatePtr priv = domain->conn->privateData;
> -
> - if (domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
> - return -1;
>
> root = sexpr_get(domain->conn, "/xend/domain/%s?detail=1", domain->name);
> if (root == NULL)
> @@ -1668,7 +1664,6 @@ xenDaemonDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
> * @domain: a domain object
> * @state: returned domain's state
> * @reason: returned reason for the state
> - * @flags: additional flags, 0 for now
> *
> * This method looks up domain state and reason.
> *
> @@ -1677,17 +1672,10 @@ xenDaemonDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
> int
> xenDaemonDomainGetState(virDomainPtr domain,
> int *state,
> - int *reason,
> - unsigned int flags)
> + int *reason)
> {
> - xenUnifiedPrivatePtr priv = domain->conn->privateData;
> struct sexpr *root;
>
> - virCheckFlags(0, -1);
> -
> - if (domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
> - return -1;
> -
> root = sexpr_get(domain->conn, "/xend/domain/%s?detail=1", domain->name);
> if (!root)
> return -1;
> @@ -3425,7 +3413,6 @@ xenDaemonDomainBlockPeek(virDomainPtr domain,
> }
>
> struct xenUnifiedDriver xenDaemonDriver = {
> - .xenDomainGetInfo = xenDaemonDomainGetInfo,
> .xenDomainPinVcpu = xenDaemonDomainPinVcpu,
> .xenDomainGetVcpus = xenDaemonDomainGetVcpus,
> .xenListDefinedDomains = xenDaemonListDefinedDomains,
> diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h
> index 9681068..fd661c9 100644
> --- a/src/xen/xend_internal.h
> +++ b/src/xen/xend_internal.h
> @@ -101,8 +101,7 @@ int xenDaemonDomainSetMaxMemory(virDomainPtr domain, unsigned long memory);
> int xenDaemonDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info);
> int xenDaemonDomainGetState(virDomainPtr domain,
> int *state,
> - int *reason,
> - unsigned int flags);
> + int *reason);
> char *xenDaemonDomainGetXMLDesc(virDomainPtr domain, unsigned int flags,
> const char *cpus);
> unsigned long long xenDaemonDomainGetMaxMemory(virDomainPtr domain);
> diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
> index eddaca0..38f401a 100644
> --- a/src/xen/xm_internal.c
> +++ b/src/xen/xm_internal.c
> @@ -81,7 +81,6 @@ static int xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml,
> #define XM_XML_ERROR "Invalid xml"
>
> struct xenUnifiedDriver xenXMDriver = {
> - .xenDomainGetInfo = xenXMDomainGetInfo,
> .xenDomainPinVcpu = xenXMDomainPinVcpu,
> .xenListDefinedDomains = xenXMListDefinedDomains,
> .xenNumOfDefinedDomains = xenXMNumOfDefinedDomains,
> @@ -462,15 +461,10 @@ xenXMClose(virConnectPtr conn)
> * Since these are all offline domains, the state is always SHUTOFF.
> */
> int
> -xenXMDomainGetState(virDomainPtr domain,
> - int *state, int *reason,
> - unsigned int flags)
> +xenXMDomainGetState(virDomainPtr domain ATTRIBUTE_UNUSED,
> + int *state,
> + int *reason)
> {
> - virCheckFlags(0, -1);
> -
> - if (domain->id != -1)
> - return -1;
> -
> *state = VIR_DOMAIN_SHUTOFF;
> if (reason)
> *reason = 0;
> @@ -490,9 +484,6 @@ xenXMDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
> const char *filename;
> xenXMConfCachePtr entry;
>
> - if (domain->id != -1)
> - return -1;
> -
> xenUnifiedLock(priv);
>
> if (!(filename = virHashLookup(priv->nameConfigMap, domain->name)))
> diff --git a/src/xen/xm_internal.h b/src/xen/xm_internal.h
> index 6424c41..257b663 100644
> --- a/src/xen/xm_internal.h
> +++ b/src/xen/xm_internal.h
> @@ -43,8 +43,7 @@ const char *xenXMGetType(virConnectPtr conn);
> int xenXMDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info);
> int xenXMDomainGetState(virDomainPtr domain,
> int *state,
> - int *reason,
> - unsigned int flags);
> + int *reason);
> char *xenXMDomainGetXMLDesc(virDomainPtr domain, unsigned int flags);
> int xenXMDomainSetMemory(virDomainPtr domain, unsigned long memory);
> int xenXMDomainSetMaxMemory(virDomainPtr domain, unsigned long memory);
> diff --git a/src/xen/xs_internal.c b/src/xen/xs_internal.c
> index dd1f2a0..496c30b 100644
> --- a/src/xen/xs_internal.c
> +++ b/src/xen/xs_internal.c
> @@ -56,32 +56,11 @@
> static void xenStoreWatchEvent(int watch, int fd, int events, void *data);
> static void xenStoreWatchListFree(xenStoreWatchListPtr list);
>
> -struct xenUnifiedDriver xenStoreDriver = {
> - .xenDomainGetInfo = xenStoreGetDomainInfo,
> -};
> -
> /************************************************************************
> * *
> * Helper internal APIs *
> * *
> ************************************************************************/
> -/**
> - * virConnectDoStoreList:
> - * @conn: pointer to the hypervisor connection
> - * @path: the absolute path of the directory in the store to list
> - * @nb: OUT pointer to the number of items found
> - *
> - * Internal API querying the Xenstore for a list
> - *
> - * Returns a string which must be freed by the caller or NULL in case of error
> - */
> -static char **
> -virConnectDoStoreList(virConnectPtr conn, const char *path, unsigned int *nb)
> -{
> - xenUnifiedPrivatePtr priv = conn->privateData;
> -
> - return xs_directory(priv->xshandle, 0, path, nb);
> -}
>
> /**
> * virDomainDoStoreQuery:
> @@ -235,100 +214,6 @@ xenStoreClose(virConnectPtr conn)
> }
>
> /**
> - * xenStoreGetDomainInfo:
> - * @domain: pointer to the domain block
> - * @info: the place where information should be stored
> - *
> - * Do a hypervisor call to get the related set of domain information.
> - *
> - * Returns 0 in case of success, -1 in case of error.
> - */
> -int
> -xenStoreGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info)
> -{
> - char *tmp, **tmp2;
> - unsigned int nb_vcpus;
> - char request[200];
> - xenUnifiedPrivatePtr priv = domain->conn->privateData;
> -
> - if (priv->xshandle == NULL || domain->id == -1)
> - return -1;
> -
> - tmp = virDomainDoStoreQuery(domain->conn, domain->id, "running");
> - if (tmp != NULL) {
> - if (tmp[0] == '1')
> - info->state = VIR_DOMAIN_RUNNING;
> - VIR_FREE(tmp);
> - } else {
> - info->state = VIR_DOMAIN_NOSTATE;
> - }
> - tmp = virDomainDoStoreQuery(domain->conn, domain->id, "memory/target");
> - if (tmp != NULL) {
> - info->memory = atol(tmp);
> - info->maxMem = atol(tmp);
> - VIR_FREE(tmp);
> - } else {
> - info->memory = 0;
> - info->maxMem = 0;
> - }
> -#if 0
> - /* doesn't seems to work */
> - tmp = virDomainDoStoreQuery(domain->conn, domain->id, "cpu_time");
> - if (tmp != NULL) {
> - info->cpuTime = atol(tmp);
> - VIR_FREE(tmp);
> - } else {
> - info->cpuTime = 0;
> - }
> -#endif
> - snprintf(request, 199, "/local/domain/%d/cpu", domain->id);
> - request[199] = 0;
> - tmp2 = virConnectDoStoreList(domain->conn, request, &nb_vcpus);
> - if (tmp2 != NULL) {
> - info->nrVirtCpu = nb_vcpus;
> - VIR_FREE(tmp2);
> - }
> - return 0;
> -}
> -
> -/**
> - * xenStoreDomainGetState:
> - * @domain: pointer to the domain block
> - * @state: returned domain's state
> - * @reason: returned state reason
> - * @flags: additional flags, 0 for now
> - *
> - * Returns 0 in case of success, -1 in case of error.
> - */
> -int
> -xenStoreDomainGetState(virDomainPtr domain,
> - int *state,
> - int *reason,
> - unsigned int flags)
> -{
> - char *running;
> -
> - virCheckFlags(0, -1);
> -
> - if (domain->id == -1)
> - return -1;
> -
> - running = virDomainDoStoreQuery(domain->conn, domain->id, "running");
> -
> - if (running && *running == '1')
> - *state = VIR_DOMAIN_RUNNING;
> - else
> - *state = VIR_DOMAIN_NOSTATE;
> - if (reason)
> - *reason = 0;
> -
> - VIR_FREE(running);
> -
> - return 0;
> -}
> -
> -
> -/**
> * xenStoreNumOfDomains:
> * @conn: pointer to the hypervisor connection
> *
> diff --git a/src/xen/xs_internal.h b/src/xen/xs_internal.h
> index 4390733..bc5bd8c 100644
> --- a/src/xen/xs_internal.h
> +++ b/src/xen/xs_internal.h
> @@ -26,19 +26,10 @@
> # include "internal.h"
> # include "driver.h"
>
> -extern struct xenUnifiedDriver xenStoreDriver;
> -int xenStoreInit (void);
> -
> int xenStoreOpen (virConnectPtr conn,
> virConnectAuthPtr auth,
> unsigned int flags);
> int xenStoreClose (virConnectPtr conn);
> -int xenStoreGetDomainInfo (virDomainPtr domain,
> - virDomainInfoPtr info);
> -int xenStoreDomainGetState (virDomainPtr domain,
> - int *state,
> - int *reason,
> - unsigned int flags);
> int xenStoreNumOfDomains (virConnectPtr conn);
> int xenStoreListDomains (virConnectPtr conn,
> int *ids,
>
More information about the libvir-list
mailing list