On Mon, Aug 25, 2014 at 08:38:06PM -0400, John Ferlan wrote:
Introduce XML to allowing adding iothreads to the domain. These can
be
used by virtio-blk-pci devices in order to assign a specific thread to
handle the workload for the device. The iothreads are the official
implementation of the virtio-blk Data Plane that's been in tech preview
for QEMU.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
docs/formatdomain.html.in | 26 ++++++++++++++++++++++++++
docs/schemas/domaincommon.rng | 12 ++++++++++++
src/conf/domain_conf.c | 28 ++++++++++++++++++++++++++++
src/conf/domain_conf.h | 2 ++
4 files changed, 68 insertions(+)
[...]
diff --git a/docs/schemas/domaincommon.rng
b/docs/schemas/domaincommon.rng
index 9a89dd8..b4ac483 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -632,6 +632,12 @@
</optional>
<optional>
+ <element name="iothreads">
+ <ref name="countIOThreads"/>
What's the difference between this and using ref name="unsignedInt"
directly?
+ </element>
+ </optional>
+
+ <optional>
<ref name="blkiotune"/>
</optional>
@@ -4747,6 +4753,12 @@
<param name="minInclusive">1</param>
</data>
</define>
+ <define name="countIOThreads">
+ <data type="unsignedInt">
+ <param name="pattern">[0-9]+</param>
+ <param name="minInclusive">0</param>
+ </data>
+ </define>
<define name="vcpuid">
<data type="unsignedShort">
<param name="pattern">[0-9]+</param>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 22a7f7e..671c41c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -11953,6 +11953,23 @@ virDomainDefParseXML(xmlDocPtr xml,
}
}
+ /* Optional - iothreads */
+ n = virXPathULong("string(./iothreads[1])", ctxt, &count);
+ if (n == -2) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("iothreads count must be an integer"));
+ goto error;
+ } else if (n < 0) {
+ def->iothreads = 0;
+ } else {
+ if ((unsigned int) count != count) {
Instead of this machinery, it would be more straightforward to just do
(example written by hand, not tested):
tmp = virXPathString("string(./iothreads[1])", ctxt);
if (tmp && virStrToLong_uip(tmp, NULL, 0, &def->iothreads) < 0)
virReportError(VIR_ERR_XML_ERROR, _("invalid iothreads count
'%s'"), tmp);
Martin