Split up parts of virDomainVcpuPinDefParseXML into
virDomainEmulatorPinDefParseXML.
---
src/conf/domain_conf.c | 50 +++++++++++++++++++++++++++++++++++++-------------
1 file changed, 37 insertions(+), 13 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 1763305..ec7f9c9 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -13171,7 +13171,6 @@ static virDomainPinDefPtr
virDomainVcpuPinDefParseXML(xmlNodePtr node,
xmlXPathContextPtr ctxt,
int maxvcpus,
- bool emulator,
bool iothreads)
{
virDomainPinDefPtr def;
@@ -13186,7 +13185,7 @@ virDomainVcpuPinDefParseXML(xmlNodePtr node,
ctxt->node = node;
- if (!emulator && !iothreads) {
+ if (!iothreads) {
ret = virXPathInt("string(./@vcpu)", ctxt, &vcpuid);
if ((ret == -2) || (vcpuid < -1)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -13235,10 +13234,7 @@ virDomainVcpuPinDefParseXML(xmlNodePtr node,
}
if (!(tmp = virXMLPropString(node, "cpuset"))) {
- if (emulator)
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("missing cpuset for emulatorpin"));
- else if (iothreads)
+ if (iothreads)
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("missing cpuset for iothreadpin"));
else
@@ -13262,6 +13258,38 @@ virDomainVcpuPinDefParseXML(xmlNodePtr node,
}
+/* Parse the XML definition for emulatorpin.
+ * emulatorpin has the form of
+ * <emulatorpin cpuset='0'/>
+ */
+static virDomainPinDefPtr
+virDomainEmulatorPinDefParseXML(xmlNodePtr node)
+{
+ virDomainPinDefPtr def;
+ char *tmp = NULL;
+
+ if (VIR_ALLOC(def) < 0)
+ return NULL;
+
+ if (!(tmp = virXMLPropString(node, "cpuset"))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("missing cpuset for emulatorpin"));
+ goto error;
+ }
+
+ if (virBitmapParse(tmp, 0, &def->cpumask, VIR_DOMAIN_CPUMASK_LEN) < 0)
+ goto error;
+
+ VIR_FREE(tmp);
+ return def;
+
+ error:
+ VIR_FREE(tmp);
+ VIR_FREE(def);
+ return NULL;
+}
+
+
int
virDomainDefMaybeAddController(virDomainDefPtr def,
int type,
@@ -13942,7 +13970,7 @@ virDomainDefParseXML(xmlDocPtr xml,
for (i = 0; i < n; i++) {
virDomainPinDefPtr vcpupin = NULL;
vcpupin = virDomainVcpuPinDefParseXML(nodes[i], ctxt,
- def->maxvcpus, false, false);
+ def->maxvcpus, false);
if (!vcpupin)
goto error;
@@ -14012,11 +14040,7 @@ virDomainDefParseXML(xmlDocPtr xml,
goto error;
}
- def->cputune.emulatorpin = virDomainVcpuPinDefParseXML(nodes[0],
- ctxt, 0,
- true, false);
-
- if (!def->cputune.emulatorpin)
+ if (!(def->cputune.emulatorpin = virDomainEmulatorPinDefParseXML(nodes[0])))
goto error;
}
VIR_FREE(nodes);
@@ -14035,7 +14059,7 @@ virDomainDefParseXML(xmlDocPtr xml,
virDomainPinDefPtr iothreadpin = NULL;
iothreadpin = virDomainVcpuPinDefParseXML(nodes[i], ctxt,
def->iothreads,
- false, true);
+ true);
if (!iothreadpin)
goto error;
--
2.2.2