On 05/02/2016 06:30 PM, John Ferlan wrote: > Add the ability to add an 'iothread' to the controller which will be how > virtio-scsi-pci and virtio-scsi-ccw iothreads have been implemented in qemu. > > Describe the new functionality and add tests to parse/validate that the > new attribute can be added. > > Signed-off-by: John Ferlan <jferlan@xxxxxxxxxx> > --- > docs/formatdomain.html.in | 33 +++++++++++--- > docs/schemas/domaincommon.rng | 3 ++ > src/conf/domain_conf.c | 25 ++++++++++- > src/conf/domain_conf.h | 1 + > .../qemuxml2argv-iothreads-virtio-scsi-ccw.xml | 39 +++++++++++++++++ > .../qemuxml2argv-iothreads-virtio-scsi-pci.xml | 47 ++++++++++++++++++++ > .../qemuxml2xmlout-iothreads-virtio-scsi-ccw.xml | 40 +++++++++++++++++ > .../qemuxml2xmlout-iothreads-virtio-scsi-pci.xml | 51 ++++++++++++++++++++++ > tests/qemuxml2xmltest.c | 7 +++ > 9 files changed, 240 insertions(+), 6 deletions(-) > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-iothreads-virtio-scsi-ccw.xml > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-iothreads-virtio-scsi-pci.xml > create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-iothreads-virtio-scsi-ccw.xml > create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-iothreads-virtio-scsi-pci.xml > > diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in > index 5781dba..5e27fca 100644 > --- a/docs/formatdomain.html.in > +++ b/docs/formatdomain.html.in > @@ -565,11 +565,13 @@ > <dt><code>iothreads</code></dt> > <dd> > The content of this optional element defines the number > - of IOThreads to be assigned to the domain for use by > - virtio-blk-pci and virtio-blk-ccw target storage devices. There > - should be only 1 or 2 IOThreads per host CPU. There may be more > - than one supported device assigned to each IOThread. > - <span class="since">Since 1.2.8</span> > + of IOThreads to be assigned to the domain for use by supported > + storage disks or controllers. There should be only 1 or 2 IOThreads > + per host CPU. There may be more than one supported device assigned > + to each IOThread. Supported for virtio-blk-pci and virtio-blk-ccw > + disk devices <span class="since">since 1.2.8 (QEMU 2.1)</span>. > + Supported for virtio-scsi-pci and virtio-scsi-ccw controller > + devices <span class="since">since 1.3.4 (QEMU 2.4)</span>. > </dd> > <dt><code>iothreadids</code></dt> > <dd> This is the bit that should be made generic IMO > @@ -3004,6 +3006,10 @@ > <controller type='virtio-serial' index='1'> > <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> > </controller> > + <controller type='scsi' index='0' model='virtio-scsi'> > + <driver iothread='4'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/> > + </controller> > ... > </devices> > ...</pre> > @@ -3084,6 +3090,23 @@ > I/O asynchronous handling</a> or not. Accepted values are > "on" and "off". <span class="since">Since 1.2.18</span> > </dd> > + <dt><code>iothread</code></dt> > + <dd> > + Supported for controller type <code>scsi</code> using model > + <code>virtio-scsi</code> for <code>address</code> types > + <code>pci</code> and <code>ccw</code> > + <span class="since">since 1.3.4 (QEMU 2.4)</span>. > + > + The optional <code>iothread</code> attribute assigns the controller > + to an IOThread as defined by the range for the domain > + <a href="#elementsIOThreadsAllocation"><code>iothreads</code></a> > + value. Each SCSI <code>disk</code> assigned to use the specified > + <code>controller</code> will utilize the same IOThread. If a specific > + IOThread is desired for a specific SCSI <code>disk</code>, then > + multiple controllers must be defined each having a specific > + <code>iothread</code> value. The <code>iothread</code> value > + must be within the range 1 to the domain iothreads value. > + </dd> > </dl> > <p> > USB companion controllers have an optional > diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng > index b82f8c8..ceced6b 100644 > --- a/docs/schemas/domaincommon.rng > +++ b/docs/schemas/domaincommon.rng > @@ -1893,6 +1893,9 @@ > <optional> > <ref name="ioeventfd"/> > </optional> > + <optional> > + <ref name="driverIOThread"/> > + </optional> > </element> > </optional> > </interleave> > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index 6375b2b..f571466 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -7853,6 +7853,7 @@ virDomainControllerDefParseXML(xmlNodePtr node, > char *busNr = NULL; > int numaNode = -1; > char *ioeventfd = NULL; > + char *iothread = NULL; > xmlNodePtr saved = ctxt->node; > int rc; > > @@ -7897,6 +7898,7 @@ virDomainControllerDefParseXML(xmlNodePtr node, > cmd_per_lun = virXMLPropString(cur, "cmd_per_lun"); > max_sectors = virXMLPropString(cur, "max_sectors"); > ioeventfd = virXMLPropString(cur, "ioeventfd"); > + iothread = virXMLPropString(cur, "iothread"); > } else if (xmlStrEqual(cur->name, BAD_CAST "model")) { > if (processedModel) { > virReportError(VIR_ERR_XML_ERROR, "%s", > @@ -7958,6 +7960,21 @@ virDomainControllerDefParseXML(xmlNodePtr node, > goto error; > } > > + if (iothread) { > + if (def->model != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI) { > + virReportError(VIR_ERR_XML_ERROR, > + _("'iothread' attribute only supported for " > + "controller model '%s'"), > + virDomainControllerModelSCSITypeToString(VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI)); > + goto error; > + } I think this particular check should be moved to one of the generic PostParse validation functions, since it's not specific to parse time. Looks fine otherwise - Cole -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list