[libvirt] [PATCH 26/40] Simplify the Xen domain attach/dettach driver methods

Jim Fehlig jfehlig at suse.com
Wed May 8 23:07:40 UTC 2013


Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at 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 at 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(-)
>   

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
>   




More information about the libvir-list mailing list