[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