---
src/conf/domain_conf.c | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index ff27bc7..62ba9de 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7860,7 +7860,19 @@ cleanup:
return ret;
}
-/* Parse the XML definition for a vcpupin */
+/* Parse the XML definition for a vcpupin or emulatorpin.
+ *
+ * vcpupin has the form of
+ *
+ * <vcpupin vcpu='0' cpuset='0'/>
+ *
+ * and emulatorpin has the form of
+ *
+ * <emulatorpin cpuset='0'/>
+ *
+ * A vcpuid of -1 is valid and only valid for emulatorpin. So callers
+ * have to check the returned cpuid for validity.
+ */
static virDomainVcpuPinDefPtr
virDomainVcpuPinDefParseXML(const xmlNodePtr node,
xmlXPathContextPtr ctxt,
@@ -7868,7 +7880,7 @@ virDomainVcpuPinDefParseXML(const xmlNodePtr node,
{
virDomainVcpuPinDefPtr def;
xmlNodePtr oldnode = ctxt->node;
- unsigned int vcpuid;
+ unsigned int vcpuid = -1;
char *tmp = NULL;
int ret;
@@ -7884,13 +7896,9 @@ virDomainVcpuPinDefParseXML(const xmlNodePtr node,
virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("vcpu id must be an unsigned
integer"));
goto error;
- } else if (ret == -1) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("can't parse vcpupin node"));
- goto error;
}
- if (vcpuid >= maxvcpus) {
+ if (vcpuid != -1 && vcpuid >= maxvcpus) {
virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("vcpu id must be less than
maxvcpus"));
goto error;
--
1.7.10.2