mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
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: Jim Fehlig <jfehlig@suse.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
65ff4e6c0f
commit
8e669b382c
@ -4464,7 +4464,7 @@
|
||||
<driver iothread='4'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
|
||||
</controller>
|
||||
<controller type='xenbus' maxGrantFrames='64'/>
|
||||
<controller type='xenbus' maxGrantFrames='64' maxEventChannels='2047'/>
|
||||
...
|
||||
</devices>
|
||||
...</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 */
|
||||
|
Loading…
Reference in New Issue
Block a user