[libvirt] [PATCH 06/11] Convert Xen domain VCPU driver methods to use virDomainDefPtr

Jim Fehlig jfehlig at suse.com
Mon May 20 18:14:04 UTC 2013


Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
>
> Introduce use of a virDomainDefPtr in the domain VCPU
> APIs to simplify introduction of ACL security checks.
> The virDomainPtr cannot be safely used, since the app
> may have supplied mis-matching name/uuid/id fields. eg
> the name points to domain X, while the uuid points to
> domain Y. Resolving the virDomainPtr to a virDomainDefPtr
> ensures a consistent name/uuid/id set.
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
>  src/xen/xen_driver.c     | 84 ++++++++++++++++++++++++++++++++++++++++--------
>  src/xen/xen_hypervisor.c | 42 ++++++++++++------------
>  src/xen/xen_hypervisor.h |  9 ++++--
>  src/xen/xend_internal.c  | 81 ++++++++++++++++++++++++++--------------------
>  src/xen/xend_internal.h  | 17 ++++++----
>  src/xen/xm_internal.c    | 30 +++++++++--------
>  src/xen/xm_internal.h    | 19 ++++++++---
>  7 files changed, 187 insertions(+), 95 deletions(-)
>
> diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
> index 8b7dec9..04cb69d 100644
> --- a/src/xen/xen_driver.c
> +++ b/src/xen/xen_driver.c
> @@ -647,11 +647,30 @@ xenUnifiedConnectNumOfDomains(virConnectPtr conn)
>  
>  static virDomainPtr
>  xenUnifiedDomainCreateXML(virConnectPtr conn,
> -                          const char *xmlDesc, unsigned int flags)
> +                          const char *xml,
> +                          unsigned int flags)
>  {
> +    xenUnifiedPrivatePtr priv = conn->privateData;
> +    virDomainDefPtr def = NULL;
> +    virDomainPtr ret = NULL;
> +
>      virCheckFlags(0, NULL);
>  
> -    return xenDaemonCreateXML(conn, xmlDesc);
> +    if (!(def = virDomainDefParseString(xml, priv->caps, priv->xmlopt,
> +                                        1 << VIR_DOMAIN_VIRT_XEN,
> +                                        VIR_DOMAIN_XML_INACTIVE)))
> +        goto cleanup;
> +
> +    if (xenDaemonCreateXML(conn, def) < 0)
> +        goto cleanup;
> +
> +    ret = virGetDomain(conn, def->name, def->uuid);
> +    if (ret)
> +        ret->id = def->id;
> +
> +cleanup:
> +    virDomainDefFree(def);
> +    return ret;
>  }
>   

Should this hunk be in patch 2? Or perhaps it was meant for patch 5?

>  
>  static virDomainPtr
> @@ -1182,6 +1201,8 @@ xenUnifiedDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
>                                unsigned int flags)
>  {
>      xenUnifiedPrivatePtr priv = dom->conn->privateData;
> +    virDomainDefPtr def = NULL;
> +    int ret = -1;
>  
>      virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
>                    VIR_DOMAIN_VCPU_CONFIG |
> @@ -1202,13 +1223,20 @@ xenUnifiedDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
>          return -1;
>      }
>  
> +    if (!(def = xenGetDomainDefForDom(dom)))
> +        goto cleanup;
> +
>      /* Try non-hypervisor methods first, then hypervisor direct method
>       * as a last resort.
>       */
>      if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
> -        return xenXMDomainSetVcpusFlags(dom, nvcpus, flags);
> +        ret = xenXMDomainSetVcpusFlags(dom->conn, def, nvcpus, flags);
>      else
> -        return xenDaemonDomainSetVcpusFlags(dom, nvcpus, flags);
> +        ret = xenDaemonDomainSetVcpusFlags(dom->conn, def, nvcpus, flags);
> +
> +cleanup:
> +    virDomainDefFree(def);
> +    return ret;
>  }
>  
>  static int
> @@ -1231,15 +1259,24 @@ xenUnifiedDomainPinVcpu(virDomainPtr dom, unsigned int vcpu,
>                          unsigned char *cpumap, int maplen)
>  {
>      xenUnifiedPrivatePtr priv = dom->conn->privateData;
> +    virDomainDefPtr def = NULL;
> +    int ret = -1;
> +
> +    if (!(def = xenGetDomainDefForDom(dom)))
> +        goto cleanup;
>  
>      if (dom->id < 0) {
>          if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
> -            return xenXMDomainPinVcpu(dom, vcpu, cpumap, maplen);
> +            ret = xenXMDomainPinVcpu(dom->conn, def, vcpu, cpumap, maplen);
>          else
> -            return xenDaemonDomainPinVcpu(dom, vcpu, cpumap, maplen);
> +            ret = xenDaemonDomainPinVcpu(dom->conn, def, vcpu, cpumap, maplen);
>      } else {
> -        return xenHypervisorPinVcpu(dom, vcpu, cpumap, maplen);
> +        ret = xenHypervisorPinVcpu(dom->conn, def, vcpu, cpumap, maplen);
>      }
> +
> +cleanup:
> +    virDomainDefFree(def);
> +    return ret;
>  }
>  
>  static int
> @@ -1248,39 +1285,58 @@ xenUnifiedDomainGetVcpus(virDomainPtr dom,
>                           unsigned char *cpumaps, int maplen)
>  {
>      xenUnifiedPrivatePtr priv = dom->conn->privateData;
> +    virDomainDefPtr def = NULL;
> +    int ret = -1;
> +
> +    if (!(def = xenGetDomainDefForDom(dom)))
> +        goto cleanup;
> +
>      if (dom->id < 0) {
>          if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
>              virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                             _("Cannot get VCPUs of inactive domain"));
> -            return -1;
> +            goto cleanup;
>          } else {
> -            return xenDaemonDomainGetVcpus(dom, info, maxinfo, cpumaps, maplen);
> +            ret = xenDaemonDomainGetVcpus(dom->conn, def, info, maxinfo, cpumaps, maplen);
>          }
>      } else {
> -        return xenHypervisorGetVcpus(dom, info, maxinfo, cpumaps, maplen);
> +        ret = xenHypervisorGetVcpus(dom->conn, def, info, maxinfo, cpumaps, maplen);
>      }
> +
> +cleanup:
> +    virDomainDefFree(def);
> +    return ret;
>  }
>  
>  static int
>  xenUnifiedDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
>  {
>      xenUnifiedPrivatePtr priv = dom->conn->privateData;
> +    virDomainDefPtr def = NULL;
> +    int ret = -1;
>  
>      virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
>                    VIR_DOMAIN_VCPU_CONFIG |
>                    VIR_DOMAIN_VCPU_MAXIMUM, -1);
>  
> +    if (!(def = xenGetDomainDefForDom(dom)))
> +        goto cleanup;
> +
>      if (dom->id < 0) {
>          if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
> -            return xenXMDomainGetVcpusFlags(dom, flags);
> +            ret = xenXMDomainGetVcpusFlags(dom->conn, def, flags);
>          else
> -            return xenDaemonDomainGetVcpusFlags(dom, flags);
> +            ret = xenDaemonDomainGetVcpusFlags(dom->conn, def, flags);
>      } else {
>          if (flags == (VIR_DOMAIN_VCPU_CONFIG | VIR_DOMAIN_VCPU_MAXIMUM))
> -            return xenHypervisorGetVcpuMax(dom);
> +            ret = xenHypervisorGetVcpuMax(dom->conn, def);
>          else
> -            return xenDaemonDomainGetVcpusFlags(dom, flags);
> +            ret = xenDaemonDomainGetVcpusFlags(dom->conn, def, flags);
>      }
> +
> +cleanup:
> +    virDomainDefFree(def);
> +    return ret;
>  }
>  
>  static int
> diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c
> index 423ce85..b97b329 100644
> --- a/src/xen/xen_hypervisor.c
> +++ b/src/xen/xen_hypervisor.c
> @@ -2931,16 +2931,16 @@ xenHypervisorSetMaxMemory(virConnectPtr conn,
>   */
>  
>  int
> -xenHypervisorPinVcpu(virDomainPtr domain, unsigned int vcpu,
> -                     unsigned char *cpumap, int maplen)
> +xenHypervisorPinVcpu(virConnectPtr conn,
> +                     virDomainDefPtr def,
> +                     unsigned int vcpu,
> +                     unsigned char *cpumap,
> +                     int maplen)
>  {
>      int ret;
> -    xenUnifiedPrivatePtr priv = domain->conn->privateData;
> -
> -    if (domain->id < 0)
> -        return -1;
> +    xenUnifiedPrivatePtr priv = conn->privateData;
>  
> -    ret = virXen_setvcpumap(priv->handle, domain->id, vcpu,
> +    ret = virXen_setvcpumap(priv->handle, def->id, vcpu,
>                              cpumap, maplen);
>      if (ret < 0)
>          return -1;
> @@ -2967,7 +2967,8 @@ xenHypervisorPinVcpu(virDomainPtr domain, unsigned int vcpu,
>   * Returns the number of info filled in case of success, -1 in case of failure.
>   */
>  int
> -xenHypervisorGetVcpus(virDomainPtr domain,
> +xenHypervisorGetVcpus(virConnectPtr conn,
> +                      virDomainDefPtr def,
>                        virVcpuInfoPtr info,
>                        int maxinfo,
>                        unsigned char *cpumaps,
> @@ -2975,22 +2976,22 @@ xenHypervisorGetVcpus(virDomainPtr domain,
>  {
>      xen_getdomaininfo dominfo;
>      int ret;
> -    xenUnifiedPrivatePtr priv = domain->conn->privateData;
> +    xenUnifiedPrivatePtr priv = conn->privateData;
>      virVcpuInfoPtr ipt;
>      int nbinfo, i;
>  
> -    if (domain->id < 0 || sizeof(cpumap_t) & 7) {
> +    if (sizeof(cpumap_t) & 7) {
>          virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                       _("domain shut off or invalid"));
> +                       _("invalid cpumap_t size"));
>          return -1;
>      }
>  
>      /* first get the number of virtual CPUs in this domain */
>      XEN_GETDOMAININFO_CLEAR(dominfo);
> -    ret = virXen_getdomaininfo(priv->handle, domain->id,
> +    ret = virXen_getdomaininfo(priv->handle, def->id,
>                                 &dominfo);
>  
> -    if ((ret < 0) || (XEN_GETDOMAININFO_DOMAIN(dominfo) != domain->id)) {
> +    if ((ret < 0) || (XEN_GETDOMAININFO_DOMAIN(dominfo) != def->id)) {
>          virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                         _("cannot get domain details"));
>          return -1;
> @@ -3003,7 +3004,7 @@ xenHypervisorGetVcpus(virDomainPtr domain,
>  
>      for (i = 0, ipt = info; i < nbinfo; i++, ipt++) {
>          if ((cpumaps != NULL) && (i < maxinfo)) {
> -            ret = virXen_getvcpusinfo(priv->handle, domain->id, i,
> +            ret = virXen_getvcpusinfo(priv->handle, def->id, i,
>                                        ipt,
>                                        (unsigned char *)VIR_GET_CPUMAP(cpumaps, maplen, i),
>                                        maplen);
> @@ -3013,7 +3014,7 @@ xenHypervisorGetVcpus(virDomainPtr domain,
>                  return -1;
>              }
>          } else {
> -            ret = virXen_getvcpusinfo(priv->handle, domain->id, i,
> +            ret = virXen_getvcpusinfo(priv->handle, def->id, i,
>                                        ipt, NULL, 0);
>              if (ret < 0) {
>                  virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> @@ -3034,22 +3035,23 @@ xenHypervisorGetVcpus(virDomainPtr domain,
>   *  the maximum number of virtual CPUs the guest was booted with.
>   */
>  int
> -xenHypervisorGetVcpuMax(virDomainPtr domain)
> +xenHypervisorGetVcpuMax(virConnectPtr conn,
> +                        virDomainDefPtr def)
>   

Fits on one line.

>  {
>      xen_getdomaininfo dominfo;
>      int ret;
>      int maxcpu;
> -    xenUnifiedPrivatePtr priv = domain->conn->privateData;
> +    xenUnifiedPrivatePtr priv = conn->privateData;
>  
>      /* inactive domain */
> -    if (domain->id < 0) {
> +    if (def->id < 0) {
>          maxcpu = MAX_VIRT_CPUS;
>      } else {
>          XEN_GETDOMAININFO_CLEAR(dominfo);
> -        ret = virXen_getdomaininfo(priv->handle, domain->id,
> +        ret = virXen_getdomaininfo(priv->handle, def->id,
>                                     &dominfo);
>  
> -        if ((ret < 0) || (XEN_GETDOMAININFO_DOMAIN(dominfo) != domain->id))
> +        if ((ret < 0) || (XEN_GETDOMAININFO_DOMAIN(dominfo) != def->id))
>              return -1;
>          maxcpu = XEN_GETDOMAININFO_MAXCPUID(dominfo) + 1;
>      }
> diff --git a/src/xen/xen_hypervisor.h b/src/xen/xen_hypervisor.h
> index 9ee1f13..1cf1e14 100644
> --- a/src/xen/xen_hypervisor.h
> +++ b/src/xen/xen_hypervisor.h
> @@ -89,18 +89,21 @@ int     xenHypervisorSetMaxMemory       (virConnectPtr conn,
>            ATTRIBUTE_NONNULL (1);
>  int     xenHypervisorCheckID            (virConnectPtr conn,
>                                           int id);
> -int     xenHypervisorPinVcpu            (virDomainPtr domain,
> +int     xenHypervisorPinVcpu            (virConnectPtr conn,
> +                                         virDomainDefPtr def,
>                                           unsigned int vcpu,
>                                           unsigned char *cpumap,
>                                           int maplen)
>            ATTRIBUTE_NONNULL (1);
> -int     xenHypervisorGetVcpus           (virDomainPtr domain,
> +int     xenHypervisorGetVcpus           (virConnectPtr conn,
> +                                         virDomainDefPtr def,
>                                           virVcpuInfoPtr info,
>                                           int maxinfo,
>                                           unsigned char *cpumaps,
>                                           int maplen)
>            ATTRIBUTE_NONNULL (1);
> -int     xenHypervisorGetVcpuMax         (virDomainPtr domain)
> +int     xenHypervisorGetVcpuMax         (virConnectPtr conn,
> +                                         virDomainDefPtr def)
>            ATTRIBUTE_NONNULL (1);
>  
>  char *  xenHypervisorGetSchedulerType   (virDomainPtr domain,
> diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
> index 77c4dec..75c980c 100644
> --- a/src/xen/xend_internal.c
> +++ b/src/xen/xend_internal.c
> @@ -1772,7 +1772,8 @@ xenDaemonNodeGetTopology(virConnectPtr conn, virCapsPtr caps)
>   * Returns 0 on success, -1 if an error message was issued
>   */
>  int
> -xenDaemonDomainSetVcpusFlags(virDomainPtr domain,
> +xenDaemonDomainSetVcpusFlags(virConnectPtr conn,
> +                             virDomainDefPtr def,
>   

Comments need updated.

>                               unsigned int vcpus,
>                               unsigned int flags)
>  {
> @@ -1788,7 +1789,7 @@ xenDaemonDomainSetVcpusFlags(virDomainPtr domain,
>          return -1;
>      }
>  
> -    if (domain->id < 0) {
> +    if (def->id < 0) {
>          if (flags & VIR_DOMAIN_VCPU_LIVE) {
>              virReportError(VIR_ERR_OPERATION_INVALID, "%s",
>                             _("domain not running"));
> @@ -1806,7 +1807,7 @@ xenDaemonDomainSetVcpusFlags(virDomainPtr domain,
>      /* Unfortunately, xend_op does not validate whether this exceeds
>       * the maximum.  */
>      flags |= VIR_DOMAIN_VCPU_MAXIMUM;
> -    if ((max = xenDaemonDomainGetVcpusFlags(domain, flags)) < 0) {
> +    if ((max = xenDaemonDomainGetVcpusFlags(conn, def, flags)) < 0) {
>          virReportError(VIR_ERR_OPERATION_INVALID, "%s",
>                         _("could not determine max vcpus for the domain"));
>          return -1;
> @@ -1819,7 +1820,7 @@ xenDaemonDomainSetVcpusFlags(virDomainPtr domain,
>      }
>  
>      snprintf(buf, sizeof(buf), "%d", vcpus);
> -    return xend_op(domain->conn, domain->name, "op", "set_vcpus", "vcpus",
> +    return xend_op(conn, def->name, "op", "set_vcpus", "vcpus",
>                     buf, NULL);
>  }
>  
> @@ -1840,14 +1841,15 @@ xenDaemonDomainSetVcpusFlags(virDomainPtr domain,
>   * Returns 0 for success; -1 (with errno) on error
>   */
>  int
> -xenDaemonDomainPinVcpu(virDomainPtr domain,
> +xenDaemonDomainPinVcpu(virConnectPtr conn,
> +                       virDomainDefPtr minidef,
>   

Same here, comments for the function need updated.

>                         unsigned int vcpu,
>                         unsigned char *cpumap,
>                         int maplen)
>  {
>      char buf[VIR_UUID_BUFLEN], mapstr[sizeof(cpumap_t) * 64];
>      int i, j, ret;
> -    xenUnifiedPrivatePtr priv = domain->conn->privateData;
> +    xenUnifiedPrivatePtr priv = conn->privateData;
>      virDomainDefPtr def = NULL;
>  
>      if (maplen > (int)sizeof(cpumap_t)) {
> @@ -1875,12 +1877,12 @@ xenDaemonDomainPinVcpu(virDomainPtr domain,
>  
>      snprintf(buf, sizeof(buf), "%d", vcpu);
>  
> -    ret = xend_op(domain->conn, domain->name, "op", "pincpu", "vcpu", buf,
> +    ret = xend_op(conn, minidef->name, "op", "pincpu", "vcpu", buf,
>                    "cpumap", mapstr, NULL);
>  
> -    if (!(def = xenDaemonDomainFetch(domain->conn,
> -                                     domain->id,
> -                                     domain->name,
> +    if (!(def = xenDaemonDomainFetch(conn,
> +                                     minidef->id,
> +                                     minidef->name,
>                                       NULL)))
>          goto cleanup;
>  
> @@ -1922,7 +1924,9 @@ cleanup:
>  
>   */
>  int
> -xenDaemonDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
> +xenDaemonDomainGetVcpusFlags(virConnectPtr conn,
> +                             virDomainDefPtr def,
> +                             unsigned int flags)
>   

Comments need updated here too.

>  {
>      struct sexpr *root;
>      int ret;
> @@ -1931,13 +1935,13 @@ xenDaemonDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
>                    VIR_DOMAIN_VCPU_CONFIG |
>                    VIR_DOMAIN_VCPU_MAXIMUM, -1);
>  
> -    if (domain->id < 0 && (flags & VIR_DOMAIN_VCPU_LIVE)) {
> +    if (def->id < 0 && (flags & VIR_DOMAIN_VCPU_LIVE)) {
>          virReportError(VIR_ERR_OPERATION_INVALID, "%s",
>                         _("domain not active"));
>          return -1;
>      }
>  
> -    root = sexpr_get(domain->conn, "/xend/domain/%s?detail=1", domain->name);
> +    root = sexpr_get(conn, "/xend/domain/%s?detail=1", def->name);
>      if (root == NULL)
>          return -1;
>  
> @@ -1973,7 +1977,8 @@ xenDaemonDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
>   * Returns the number of info filled in case of success, -1 in case of failure.
>   */
>  int
> -xenDaemonDomainGetVcpus(virDomainPtr domain,
> +xenDaemonDomainGetVcpus(virConnectPtr conn,
> +                        virDomainDefPtr def,
>   

Same here.

>                          virVcpuInfoPtr info,
>                          int maxinfo,
>                          unsigned char *cpumaps,
> @@ -1985,7 +1990,7 @@ xenDaemonDomainGetVcpus(virDomainPtr domain,
>      unsigned char *cpumap;
>      int vcpu, cpu;
>  
> -    root = sexpr_get(domain->conn, "/xend/domain/%s?op=vcpuinfo", domain->name);
> +    root = sexpr_get(conn, "/xend/domain/%s?op=vcpuinfo", def->name);
>      if (root == NULL)
>          return -1;
>  
> @@ -2128,25 +2133,25 @@ xenDaemonLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
>   *
>   * Returns a new domain object or NULL in case of failure
>   */
> -virDomainPtr
> -xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc)
> +int
> +xenDaemonCreateXML(virConnectPtr conn, virDomainDefPtr def)
>  {
>   

Comments need updated here to, but again not sure if these last hunks
were intended for a previous patch.

>      int ret;
>      char *sexpr;
> -    virDomainPtr dom = NULL;
> +    const char *tmp;
> +    struct sexpr *root;
>      xenUnifiedPrivatePtr priv = conn->privateData;
> -    virDomainDefPtr def;
>  
> -    if (!(def = virDomainDefParseString(xmlDesc, priv->caps, priv->xmlopt,
> -                                        1 << VIR_DOMAIN_VIRT_XEN,
> -                                        VIR_DOMAIN_XML_INACTIVE)))
> -        return NULL;
> -
> -    if (!(sexpr = xenFormatSxpr(conn, def, priv->xendConfigVersion))) {
> -        virDomainDefFree(def);
> -        return NULL;
> +    if (def->id != -1) {
> +        virReportError(VIR_ERR_OPERATION_INVALID,
> +                       _("Domain %s is already running"),
> +                       def->name);
> +        return -1;
>      }
>  
> +    if (!(sexpr = xenFormatSxpr(conn, def, priv->xendConfigVersion)))
> +        return -1;
> +
>      ret = xenDaemonDomainCreateXML(conn, sexpr);
>      VIR_FREE(sexpr);
>      if (ret != 0) {
> @@ -2155,8 +2160,19 @@ xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc)
>  
>      /* This comes before wait_for_devices, to ensure that latter
>         cleanup will destroy the domain upon failure */
> -    if (!(dom = virDomainLookupByName(conn, def->name)))
> +    root = sexpr_get(conn, "/xend/domain/%s?detail=1", def->name);
> +    if (root == NULL)
> +        goto error;
> +
> +    tmp = sexpr_node(root, "domain/domid");
> +    if (!tmp) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR,
> +                       _("Domain %s did not start"),
> +                       def->name);
>          goto error;
> +    }
> +    if (tmp)
> +        def->id = sexpr_int(root, "domain/domid");
>  
>      if (xend_wait_for_devices(conn, def->name) < 0)
>          goto error;
> @@ -2165,16 +2181,13 @@ xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc)
>          goto error;
>  
>      virDomainDefFree(def);
>   

Freeing def here needs to be killed too, right?

> -    return dom;
> +    return 0;
>  
>    error:
>      /* Make sure we don't leave a still-born domain around */
> -    if (dom != NULL) {
> +    if (def->id != -1)
>          xenDaemonDomainDestroy(conn, def);
> -        virObjectUnref(dom);
> -    }
> -    virDomainDefFree(def);
> -    return NULL;
> +    return -1;
>  }
>  
>  /**
> diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h
> index 1284db3..b78145c 100644
> --- a/src/xen/xend_internal.h
> +++ b/src/xen/xend_internal.h
> @@ -140,18 +140,23 @@ int xenDaemonDomainCreate(virConnectPtr conn,
>  int xenDaemonDomainUndefine(virConnectPtr conn,
>                              virDomainDefPtr def);
>  
> -int	xenDaemonDomainSetVcpus		(virDomainPtr domain,
> +int	xenDaemonDomainSetVcpus		(virConnectPtr conn,
> +                                         virDomainDefPtr def,
>                                           unsigned int vcpus);
> -int	xenDaemonDomainSetVcpusFlags	(virDomainPtr domain,
> +int	xenDaemonDomainSetVcpusFlags	(virConnectPtr conn,
> +                                         virDomainDefPtr def,
>                                           unsigned int vcpus,
>                                           unsigned int flags);
> -int	xenDaemonDomainPinVcpu		(virDomainPtr domain,
> +int	xenDaemonDomainPinVcpu		(virConnectPtr conn,
> +                                         virDomainDefPtr def,
>                                           unsigned int vcpu,
>                                           unsigned char *cpumap,
>                                           int maplen);
> -int     xenDaemonDomainGetVcpusFlags    (virDomainPtr domain,
> +int     xenDaemonDomainGetVcpusFlags    (virConnectPtr conn,
> +                                         virDomainDefPtr def,
>                                           unsigned int flags);
> -int	xenDaemonDomainGetVcpus		(virDomainPtr domain,
> +int	xenDaemonDomainGetVcpus		(virConnectPtr conn,
> +                                         virDomainDefPtr def,
>                                           virVcpuInfoPtr info,
>                                           int maxinfo,
>                                           unsigned char *cpumaps,
> @@ -163,7 +168,7 @@ int xenDaemonDomainGetAutostart          (virDomainPtr dom,
>  int xenDaemonDomainSetAutostart          (virDomainPtr domain,
>                                            int autostart);
>  
> -virDomainPtr xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc);
> +int xenDaemonCreateXML(virConnectPtr conn, virDomainDefPtr def);
>  virDomainDefPtr xenDaemonLookupByUUID(virConnectPtr conn, const unsigned char *uuid);
>  virDomainDefPtr xenDaemonLookupByName(virConnectPtr conn, const char *domname);
>  int xenDaemonDomainMigratePrepare (virConnectPtr dconn,
>   

Another hunk for a previous patch?

> diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
> index 79f773d..76425dd 100644
> --- a/src/xen/xm_internal.c
> +++ b/src/xen/xm_internal.c
> @@ -656,11 +656,12 @@ cleanup:
>   * Returns 0 on success, -1 if an error message was issued
>   */
>  int
> -xenXMDomainSetVcpusFlags(virDomainPtr domain,
> +xenXMDomainSetVcpusFlags(virConnectPtr conn,
> +                         virDomainDefPtr def,
>   

Function comments need updated.

>                           unsigned int vcpus,
>                           unsigned int flags)
>  {
> -    xenUnifiedPrivatePtr priv = domain->conn->privateData;
> +    xenUnifiedPrivatePtr priv = conn->privateData;
>      const char *filename;
>      xenXMConfCachePtr entry;
>      int ret = -1;
> @@ -678,14 +679,14 @@ xenXMDomainSetVcpusFlags(virDomainPtr domain,
>  
>      xenUnifiedLock(priv);
>  
> -    if (!(filename = virHashLookup(priv->nameConfigMap, domain->name)))
> +    if (!(filename = virHashLookup(priv->nameConfigMap, def->name)))
>          goto cleanup;
>  
>      if (!(entry = virHashLookup(priv->configCache, filename)))
>          goto cleanup;
>  
>      /* Hypervisor maximum. */
> -    if ((max = xenUnifiedConnectGetMaxVcpus(domain->conn, NULL)) < 0) {
> +    if ((max = xenUnifiedConnectGetMaxVcpus(conn, NULL)) < 0) {
>          virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                         _("could not determine max vcpus for the domain"));
>          goto cleanup;
> @@ -712,7 +713,7 @@ xenXMDomainSetVcpusFlags(virDomainPtr domain,
>      /* If this fails, should we try to undo our changes to the
>       * in-memory representation of the config file. I say not!
>       */
> -    if (xenXMConfigSaveFile(domain->conn, entry->filename, entry->def) < 0)
> +    if (xenXMConfigSaveFile(conn, entry->filename, entry->def) < 0)
>          goto cleanup;
>      ret = 0;
>  
> @@ -732,12 +733,14 @@ cleanup:
>   * issued
>   */
>  int
> -xenXMDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
> +xenXMDomainGetVcpusFlags(virConnectPtr conn,
> +                         virDomainDefPtr def,
> +                         unsigned int flags)
>   

Same here.

>  {
> -    xenUnifiedPrivatePtr priv = domain->conn->privateData;
> +    xenUnifiedPrivatePtr priv = conn->privateData;
>      const char *filename;
>      xenXMConfCachePtr entry;
> -    int ret = -2;
> +    int ret = -1;
>  
>      virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
>                    VIR_DOMAIN_VCPU_CONFIG |
> @@ -750,7 +753,7 @@ xenXMDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
>  
>      xenUnifiedLock(priv);
>  
> -    if (!(filename = virHashLookup(priv->nameConfigMap, domain->name)))
> +    if (!(filename = virHashLookup(priv->nameConfigMap, def->name)))
>          goto cleanup;
>  
>      if (!(entry = virHashLookup(priv->configCache, filename)))
> @@ -776,12 +779,13 @@ cleanup:
>   * Returns 0 for success; -1 (with errno) on error
>   */
>  int
> -xenXMDomainPinVcpu(virDomainPtr domain,
> +xenXMDomainPinVcpu(virConnectPtr conn,
> +                   virDomainDefPtr def,
>   

Same here, function comments need updated.

Regards,
Jim

>                     unsigned int vcpu ATTRIBUTE_UNUSED,
>                     unsigned char *cpumap,
>                     int maplen)
>  {
> -    xenUnifiedPrivatePtr priv = domain->conn->privateData;
> +    xenUnifiedPrivatePtr priv = conn->privateData;
>      const char *filename;
>      xenXMConfCachePtr entry;
>      int ret = -1;
> @@ -793,7 +797,7 @@ xenXMDomainPinVcpu(virDomainPtr domain,
>  
>      xenUnifiedLock(priv);
>  
> -    if (!(filename = virHashLookup(priv->nameConfigMap, domain->name))) {
> +    if (!(filename = virHashLookup(priv->nameConfigMap, def->name))) {
>          virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("virHashLookup"));
>          goto cleanup;
>      }
> @@ -807,7 +811,7 @@ xenXMDomainPinVcpu(virDomainPtr domain,
>      entry->def->cpumask = virBitmapNewData(cpumap, maplen);
>      if (!entry->def->cpumask)
>          goto cleanup;
> -    if (xenXMConfigSaveFile(domain->conn, entry->filename, entry->def) < 0)
> +    if (xenXMConfigSaveFile(conn, entry->filename, entry->def) < 0)
>          goto cleanup;
>  
>      ret = 0;
> diff --git a/src/xen/xm_internal.h b/src/xen/xm_internal.h
> index 5a434b9..28087d3 100644
> --- a/src/xen/xm_internal.h
> +++ b/src/xen/xm_internal.h
> @@ -54,12 +54,21 @@ int xenXMDomainSetMaxMemory(virConnectPtr conn,
>                              unsigned long memory);
>  unsigned long long xenXMDomainGetMaxMemory(virConnectPtr conn,
>                                             virDomainDefPtr def);
> -int xenXMDomainSetVcpus(virDomainPtr domain, unsigned int vcpus);
> -int xenXMDomainSetVcpusFlags(virDomainPtr domain, unsigned int vcpus,
> +int xenXMDomainSetVcpus(virConnectPtr conn,
> +                        virDomainDefPtr def,
> +                        unsigned int vcpus);
> +int xenXMDomainSetVcpusFlags(virConnectPtr conn,
> +                             virDomainDefPtr def,
> +                             unsigned int vcpus,
> +                             unsigned int flags);
> +int xenXMDomainGetVcpusFlags(virConnectPtr conn,
> +                             virDomainDefPtr def,
>                               unsigned int flags);
> -int xenXMDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags);
> -int xenXMDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
> -                       unsigned char *cpumap, int maplen);
> +int xenXMDomainPinVcpu(virConnectPtr conn,
> +                       virDomainDefPtr def,
> +                       unsigned int vcpu,
> +                       unsigned char *cpumap,
> +                       int maplen);
>  virDomainDefPtr xenXMDomainLookupByName(virConnectPtr conn, const char *domname);
>  virDomainDefPtr xenXMDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid);
>  
>   




More information about the libvir-list mailing list