docs/formatdomain.html.in | 6 ++++++ src/conf/domain_conf.c | 12 ++++++++++++ src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 3 +++ 4 files changed, 22 insertions(+)
In QEMU commit 5c0919d02066c3d0eb896c33265ad90101a6a84a
adds new option virtqueue_size. This Patch allows this option
to be set in libvirt.
---
docs/formatdomain.html.in | 6 ++++++
src/conf/domain_conf.c | 12 ++++++++++++
src/conf/domain_conf.h | 1 +
src/qemu/qemu_command.c | 3 +++
4 files changed, 22 insertions(+)
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 6fd2189cd..2f33b5e70 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -3867,6 +3867,12 @@
host.
<span class="since">Since 1.2.7 (QEMU and KVM only)</span>
</dd>
+ <dt><code>virtqueue_size</code></dt>
+ <dd>
+ The optional <code>virtqueue_size</code> attribute specifies the size of
+ virtio queue.
+ <span class="since">Since 3.7.0 (QEMU and KVM only)</span>
+ </dd>
<dt><code>max_sectors</code></dt>
<dd>
The optional <code>max_sectors</code> attribute specifies the maximum
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index d96b012b9..36a4deea2 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -9976,6 +9976,7 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
char *model = NULL;
char *queues = NULL;
char *cmd_per_lun = NULL;
+ char *virtqueue_size = NULL;
char *max_sectors = NULL;
bool processedModel = false;
char *modelName = NULL;
@@ -10035,6 +10036,7 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
queues = virXMLPropString(cur, "queues");
cmd_per_lun = virXMLPropString(cur, "cmd_per_lun");
max_sectors = virXMLPropString(cur, "max_sectors");
+ virtqueue_size = virXMLPropString(cur, "virtqueue_size");
ioeventfd = virXMLPropString(cur, "ioeventfd");
iothread = virXMLPropString(cur, "iothread");
@@ -10089,6 +10091,12 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
goto error;
}
+ if (virtqueue_size && virStrToLong_ui(virtqueue_size, NULL, 10, &def->virtqueue_size) < 0) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("Malformed 'virtqueue_size' value '%s'"), virtqueue_size);
+ goto error;
+ }
+
if (max_sectors && virStrToLong_ui(max_sectors, NULL, 10, &def->max_sectors) < 0) {
virReportError(VIR_ERR_XML_ERROR,
_("Malformed 'max_sectors' value %s"), max_sectors);
@@ -10310,6 +10318,7 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
VIR_FREE(model);
VIR_FREE(queues);
VIR_FREE(cmd_per_lun);
+ VIR_FREE(virtqueue_size);
VIR_FREE(max_sectors);
VIR_FREE(modelName);
VIR_FREE(chassisNr);
@@ -23293,6 +23302,9 @@ virDomainControllerDriverFormat(virBufferPtr buf,
if (def->cmd_per_lun)
virBufferAsprintf(&driverBuf, " cmd_per_lun='%u'", def->cmd_per_lun);
+ if (def->virtqueue_size)
+ virBufferAsprintf(&driverBuf, " virtqueue_size='%u'", def->virtqueue_size);
+
if (def->max_sectors)
virBufferAsprintf(&driverBuf, " max_sectors='%u'", def->max_sectors);
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 368f16f3f..141bd1aca 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -816,6 +816,7 @@ struct _virDomainControllerDef {
int model; /* -1 == undef */
unsigned int queues;
unsigned int cmd_per_lun;
+ unsigned int virtqueue_size;
unsigned int max_sectors;
int ioeventfd; /* enum virTristateSwitch */
unsigned int iothread; /* unused = 0, > 0 specific thread # */
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index fa0aa5d5c..9b1affd30 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -2808,6 +2808,9 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef,
if (def->queues)
virBufferAsprintf(&buf, ",num_queues=%u", def->queues);
+ if (def->virtqueue_size)
+ virBufferAsprintf(&buf, ",virtqueue_size=%u", def->virtqueue_size);
+
if (def->cmd_per_lun)
virBufferAsprintf(&buf, ",cmd_per_lun=%u", def->cmd_per_lun);
--
2.16.1
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Wed, Feb 28, 2018 at 10:20:28PM +0300, Klim Kireev wrote: >In QEMU commit 5c0919d02066c3d0eb896c33265ad90101a6a84a >adds new option virtqueue_size. This Patch allows this option >to be set in libvirt. >--- > docs/formatdomain.html.in | 6 ++++++ > src/conf/domain_conf.c | 12 ++++++++++++ > src/conf/domain_conf.h | 1 + > src/qemu/qemu_command.c | 3 +++ > 4 files changed, 22 insertions(+) > The XML parser/formatter and the QEMU command line formatter additions can be easily tested by extending genericxml2xmltest and qemuxml2argvtest. >diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in >index 6fd2189cd..2f33b5e70 100644 >--- a/docs/formatdomain.html.in >+++ b/docs/formatdomain.html.in >@@ -3867,6 +3867,12 @@ > host. > <span class="since">Since 1.2.7 (QEMU and KVM only)</span> > </dd> >+ <dt><code>virtqueue_size</code></dt> >+ <dd> >+ The optional <code>virtqueue_size</code> attribute specifies the size of >+ virtio queue. Would be nice to mention why the user wants to set it (and to what value). Also, "queue_size" should be sufficient as the attribute name (and increase the chance of us being able to reuse the attribute for non-virtio controllers). >+ <span class="since">Since 3.7.0 (QEMU and KVM only)</span> Libvirt 4.1.0 is already frozen, so the next release where this can be merged is 4.2.0. >+ </dd> > <dt><code>max_sectors</code></dt> > <dd> > The optional <code>max_sectors</code> attribute specifies the maximum >diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c >index d96b012b9..36a4deea2 100644 >--- a/src/conf/domain_conf.c >+++ b/src/conf/domain_conf.c >@@ -9976,6 +9976,7 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt, > char *model = NULL; > char *queues = NULL; > char *cmd_per_lun = NULL; >+ char *virtqueue_size = NULL; > char *max_sectors = NULL; > bool processedModel = false; > char *modelName = NULL; >@@ -10035,6 +10036,7 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt, > queues = virXMLPropString(cur, "queues"); > cmd_per_lun = virXMLPropString(cur, "cmd_per_lun"); > max_sectors = virXMLPropString(cur, "max_sectors"); >+ virtqueue_size = virXMLPropString(cur, "virtqueue_size"); > ioeventfd = virXMLPropString(cur, "ioeventfd"); > iothread = virXMLPropString(cur, "iothread"); > >@@ -10089,6 +10091,12 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt, > goto error; > } > >+ if (virtqueue_size && virStrToLong_ui(virtqueue_size, NULL, 10, &def->virtqueue_size) < 0) { >+ virReportError(VIR_ERR_XML_ERROR, >+ _("Malformed 'virtqueue_size' value '%s'"), virtqueue_size); >+ goto error; >+ } >+ > if (max_sectors && virStrToLong_ui(max_sectors, NULL, 10, &def->max_sectors) < 0) { > virReportError(VIR_ERR_XML_ERROR, > _("Malformed 'max_sectors' value %s"), max_sectors); >@@ -10310,6 +10318,7 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt, > VIR_FREE(model); > VIR_FREE(queues); > VIR_FREE(cmd_per_lun); >+ VIR_FREE(virtqueue_size); > VIR_FREE(max_sectors); > VIR_FREE(modelName); > VIR_FREE(chassisNr); >@@ -23293,6 +23302,9 @@ virDomainControllerDriverFormat(virBufferPtr buf, > if (def->cmd_per_lun) > virBufferAsprintf(&driverBuf, " cmd_per_lun='%u'", def->cmd_per_lun); > >+ if (def->virtqueue_size) >+ virBufferAsprintf(&driverBuf, " virtqueue_size='%u'", def->virtqueue_size); >+ > if (def->max_sectors) > virBufferAsprintf(&driverBuf, " max_sectors='%u'", def->max_sectors); > >diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h >index 368f16f3f..141bd1aca 100644 >--- a/src/conf/domain_conf.h >+++ b/src/conf/domain_conf.h >@@ -816,6 +816,7 @@ struct _virDomainControllerDef { > int model; /* -1 == undef */ > unsigned int queues; > unsigned int cmd_per_lun; >+ unsigned int virtqueue_size; > unsigned int max_sectors; > int ioeventfd; /* enum virTristateSwitch */ > unsigned int iothread; /* unused = 0, > 0 specific thread # */ >diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c >index fa0aa5d5c..9b1affd30 100644 >--- a/src/qemu/qemu_command.c >+++ b/src/qemu/qemu_command.c >@@ -2808,6 +2808,9 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, > if (def->queues) > virBufferAsprintf(&buf, ",num_queues=%u", def->queues); > >+ if (def->virtqueue_size) >+ virBufferAsprintf(&buf, ",virtqueue_size=%u", def->virtqueue_size); >+ If this option is not supported by the QEMU binary, it would be nice to report an error before trying to run the domain. See src/qemu/qemu_capabilities.c and qemuDomainDeviceDefValidateController Jan > if (def->cmd_per_lun) > virBufferAsprintf(&buf, ",cmd_per_lun=%u", def->cmd_per_lun); > -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2025 Red Hat, Inc.