Defining a domain with the following config:
<domain ...>
...
<iothreads>1</iothreads>
<cputune>
<iothreadpin cpuset='1'/>
will result in the following config formatted back:
<domain type='kvm'>
...
<iothreads>1</iothreads>
<cputune>
<iothreadpin iothread='0' cpuset='1'/>
After restart the VM would vanish. Since our schema requires the
@iothread field to be present in <iothreadpin> make it required by the
code too.
---
src/conf/domain_conf.c | 44 ++++++++++++++++++++++++--------------------
1 file changed, 24 insertions(+), 20 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 10ec17a..2ebd714 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -13233,31 +13233,35 @@ virDomainIothreadPinDefParseXML(xmlNodePtr node,
ctxt->node = node;
- if ((tmp = virXPathString("string(./@iothread)", ctxt))) {
- if (virStrToLong_uip(tmp, NULL, 10, &iothreadid) < 0) {
- virReportError(VIR_ERR_XML_ERROR,
- _("invalid setting for iothread '%s'"),
tmp);
- goto error;
- }
- VIR_FREE(tmp);
+ if (!(tmp = virXPathString("string(./@iothread)", ctxt))) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("missing iothread id in iothreadpin"));
+ goto error;
+ }
- if (iothreadid == 0) {
- virReportError(VIR_ERR_XML_ERROR, "%s",
- _("zero is an invalid iothread id value"));
- goto error;
- }
+ if (virStrToLong_uip(tmp, NULL, 10, &iothreadid) < 0) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("invalid setting for iothread '%s'"), tmp);
+ goto error;
+ }
+ VIR_FREE(tmp);
- /* IOThreads are numbered "iothread1...iothread<n>", where
- * "n" is the iothreads value */
- if (iothreadid > iothreads) {
- virReportError(VIR_ERR_XML_ERROR, "%s",
- _("iothread id must not exceed iothreads"));
- goto error;
- }
+ if (iothreadid == 0) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("zero is an invalid iothread id value"));
+ goto error;
+ }
- def->id = iothreadid;
+ /* IOThreads are numbered "iothread1...iothread<n>", where
+ * "n" is the iothreads value */
+ if (iothreadid > iothreads) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("iothread id must not exceed iothreads"));
+ goto error;
}
+ def->id = iothreadid;
+
if (!(tmp = virXMLPropString(node, "cpuset"))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("missing cpuset for iothreadpin"));
--
2.2.2