提交 ed922850 编写于 作者: H Hu Tao 提交者: Daniel Veillard

Change virDomainVcpuPinDefParseXML to support parsing emulatorpin

上级 fe1d3259
...@@ -7902,15 +7902,28 @@ cleanup: ...@@ -7902,15 +7902,28 @@ cleanup:
return ret; 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 static virDomainVcpuPinDefPtr
virDomainVcpuPinDefParseXML(const xmlNodePtr node, virDomainVcpuPinDefParseXML(const xmlNodePtr node,
xmlXPathContextPtr ctxt, xmlXPathContextPtr ctxt,
int maxvcpus) int maxvcpus,
int emulator)
{ {
virDomainVcpuPinDefPtr def; virDomainVcpuPinDefPtr def;
xmlNodePtr oldnode = ctxt->node; xmlNodePtr oldnode = ctxt->node;
unsigned int vcpuid; int vcpuid;
char *tmp = NULL; char *tmp = NULL;
int ret; int ret;
...@@ -7921,14 +7934,14 @@ virDomainVcpuPinDefParseXML(const xmlNodePtr node, ...@@ -7921,14 +7934,14 @@ virDomainVcpuPinDefParseXML(const xmlNodePtr node,
ctxt->node = node; ctxt->node = node;
ret = virXPathUInt("string(./@vcpu)", ctxt, &vcpuid); ret = virXPathInt("string(./@vcpu)", ctxt, &vcpuid);
if (ret == -2) { if ((ret == -2) || (vcpuid < -1)) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("vcpu id must be an unsigned integer")); "%s", _("vcpu id must be an unsigned integer or -1"));
goto error; goto error;
} else if (ret == -1) { } else if ((vcpuid == -1) && (emulator == 0)) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("can't parse vcpupin node")); "%s", _("vcpu id value -1 is not allowed for vcpupin"));
goto error; goto error;
} }
...@@ -8346,7 +8359,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, ...@@ -8346,7 +8359,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
for (i = 0 ; i < n ; i++) { for (i = 0 ; i < n ; i++) {
virDomainVcpuPinDefPtr vcpupin = NULL; virDomainVcpuPinDefPtr vcpupin = NULL;
vcpupin = virDomainVcpuPinDefParseXML(nodes[i], ctxt, def->maxvcpus); vcpupin = virDomainVcpuPinDefParseXML(nodes[i], ctxt, def->maxvcpus, 0);
if (!vcpupin) if (!vcpupin)
goto error; goto error;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册