From: John Ferlan Date: Mon, 25 Aug 2014 12:43:17 +0000 (-0400) Subject: domain_conf: Add support for iothreads in disk definition X-Git-Tag: v1.2.8-rc2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e2523de554d8e7a14f7a617537b98fa898b602b9;p=thirdparty%2Flibvirt.git domain_conf: Add support for iothreads in disk definition Add a new disk "driver" attribute "iothread" to be parsed as the thread number for the disk to use. In order to more easily facilitate the usage and configuration of the iothread, a "zero" for the attribute indicates iothreads are not supported for the device and a positive value indicates the specific thread to try and use. --- diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 35f48b273b..94236dd4ba 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -2160,6 +2160,14 @@ (ignore the discard request). Since 1.0.6 (QEMU and KVM only) +
  • + The optional iothread attribute assigns the + disk to an IOThread as defined by the range for the domain + iothreads + value. Multiple devices may be assigned to the same IOThread and + are numbered from 1 to the domain iothreads value. + Since 1.2.8 (QEMU only) +
  • boot
    diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 5f1c22658d..cedceae1f6 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -1572,6 +1572,9 @@ + + + @@ -1659,6 +1662,11 @@ + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index adf197b80b..53ef6947b9 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -5422,6 +5422,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt, char *ioeventfd = NULL; char *event_idx = NULL; char *copy_on_read = NULL; + char *driverIOThread = NULL; char *devaddr = NULL; virStorageEncryptionPtr encryption = NULL; char *serial = NULL; @@ -5570,6 +5571,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt, event_idx = virXMLPropString(cur, "event_idx"); copy_on_read = virXMLPropString(cur, "copy_on_read"); discard = virXMLPropString(cur, "discard"); + driverIOThread = virXMLPropString(cur, "iothread"); } else if (!def->mirror && xmlStrEqual(cur->name, BAD_CAST "mirror") && !(flags & VIR_DOMAIN_XML_INACTIVE)) { @@ -6104,6 +6106,15 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt, } } + if (driverIOThread) { + if (virStrToLong_uip(driverIOThread, NULL, 10, &def->iothread) < 0) { + virReportError(VIR_ERR_XML_ERROR, + _("Invalid iothread attribute in disk driver " + "element: %s"), driverIOThread); + goto error; + } + } + if (devaddr) { if (virDomainParseLegacyDeviceAddress(devaddr, &def->info.addr.pci) < 0) { @@ -6204,6 +6215,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt, VIR_FREE(event_idx); VIR_FREE(copy_on_read); VIR_FREE(discard); + VIR_FREE(driverIOThread); VIR_FREE(devaddr); VIR_FREE(serial); virStorageEncryptionFree(encryption); @@ -15637,7 +15649,7 @@ virDomainDiskDefFormat(virBufferPtr buf, if (def->src->driverName || def->src->format > 0 || def->cachemode || def->error_policy || def->rerror_policy || def->iomode || def->ioeventfd || def->event_idx || def->copy_on_read || - def->discard) { + def->discard || def->iothread) { virBufferAddLit(buf, "src->driverName) virBufferAsprintf(buf, " name='%s'", def->src->driverName); @@ -15660,6 +15672,8 @@ virDomainDiskDefFormat(virBufferPtr buf, virBufferAsprintf(buf, " copy_on_read='%s'", copy_on_read); if (def->discard) virBufferAsprintf(buf, " discard='%s'", discard); + if (def->iothread) + virBufferAsprintf(buf, " iothread='%u'", def->iothread); virBufferAddLit(buf, "/>\n"); } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index f8ae0e7689..9586c3be16 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -667,6 +667,7 @@ struct _virDomainDiskDef { int rawio; /* no = 0, yes = 1 */ int sgio; /* enum virDomainDeviceSGIO */ int discard; /* enum virDomainDiskDiscard */ + unsigned int iothread; /* unused = 0, > 0 specific thread # */ };