提交 8e669b38 编写于 作者: J Jim Fehlig

conf: Add a new xenbus controller option for event channels

Event channels are like PV interrupts and in conjuction with grant frames
form a data transfer mechanism for PV drivers. They are also used for
inter-processor interrupts. Guests with a large number of vcpus and/or
many PV devices many need to increase the maximum default value of 1023.
For this reason the native Xen config format supports the
'max_event_channels' setting. See xl.cfg(5) man page for more details.

Similar to the existing maxGrantFrames option, add a new xenbus controller
option 'maxEventChannels', allowing to adjust the maximum value via libvirt.
Signed-off-by: NJim Fehlig <jfehlig@suse.com>
Reviewed-by: NDaniel P. Berrangé <berrange@redhat.com>
上级 65ff4e6c
......@@ -4464,7 +4464,7 @@
&lt;driver iothread='4'/&gt;
&lt;address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/&gt;
&lt;/controller&gt;
&lt;controller type='xenbus' maxGrantFrames='64'/&gt;
&lt;controller type='xenbus' maxGrantFrames='64' maxEventChannels='2047'/&gt;
...
&lt;/devices&gt;
...</pre>
......@@ -4524,7 +4524,11 @@
<dd><span class="since">Since 5.2.0</span>, the <code>xenbus</code>
controller has an optional attribute <code>maxGrantFrames</code>,
which specifies the maximum number of grant frames the controller
makes available for connected devices.</dd>
makes available for connected devices.
<span class="since">Since 6.3.0</span>, the xenbus controller
supports the optional <code>maxEventChannels</code> attribute,
which specifies maximum number of event channels (PV interrupts)
that can be used by the guest.</dd>
</dl>
<p>
......
......@@ -2548,6 +2548,11 @@
<ref name="unsignedInt"/>
</attribute>
</optional>
<optional>
<attribute name="maxEventChannels">
<ref name="unsignedInt"/>
</attribute>
</optional>
</group>
</choice>
<optional>
......
......@@ -2262,6 +2262,7 @@ virDomainControllerDefNew(virDomainControllerType type)
break;
case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS:
def->opts.xenbusopts.maxGrantFrames = -1;
def->opts.xenbusopts.maxEventChannels = -1;
break;
case VIR_DOMAIN_CONTROLLER_TYPE_IDE:
case VIR_DOMAIN_CONTROLLER_TYPE_FDC:
......@@ -11364,6 +11365,7 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
break;
case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: {
g_autofree char *gntframes = virXMLPropString(node, "maxGrantFrames");
g_autofree char *eventchannels = virXMLPropString(node, "maxEventChannels");
if (gntframes) {
int r = virStrToLong_i(gntframes, NULL, 10,
......@@ -11374,6 +11376,15 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
goto error;
}
}
if (eventchannels) {
int r = virStrToLong_i(eventchannels, NULL, 10,
&def->opts.xenbusopts.maxEventChannels);
if (r != 0 || def->opts.xenbusopts.maxEventChannels < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Invalid maxEventChannels: %s"), eventchannels);
goto error;
}
}
break;
}
......@@ -25314,6 +25325,10 @@ virDomainControllerDefFormat(virBufferPtr buf,
virBufferAsprintf(&attrBuf, " maxGrantFrames='%d'",
def->opts.xenbusopts.maxGrantFrames);
}
if (def->opts.xenbusopts.maxEventChannels != -1) {
virBufferAsprintf(&attrBuf, " maxEventChannels='%d'",
def->opts.xenbusopts.maxEventChannels);
}
break;
default:
......
......@@ -730,6 +730,7 @@ struct _virDomainUSBControllerOpts {
struct _virDomainXenbusControllerOpts {
int maxGrantFrames; /* -1 == undef */
int maxEventChannels; /* -1 == undef */
};
/* Stores the virtual disk controller configuration */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册