libxl,xl: add max_event_channels option to xl configuration file

Add the 'max_event_channels' option to the xl configuration file to
limit the number of event channels that domain may use.

Plumb this option through to libxl via a new libxl_build_info field
and call xc_domain_set_max_evtchn() in the post build stage of domain
creation.

A new LIBXL_HAVE_BUILDINFO_EVENT_CHANNELS #define indicates that this
new field is available.

The default value of 1023 limits the domain to using the minimum
amount of global mapping pages and at most 5 xenheap pages.

Signed-off-by: David Vrabel <david.vrabel@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Keir Fraser <keir@xen.org>
This commit is contained in:
David Vrabel authored and Jan Beulich committed 2013-10-14 10:25:39 +02:00
1 parent 783b9e67f9
commit a77eb86f44
6 files changed
+30

No files matched your search

+11
View File
@@ -580,6 +580,17 @@ Allow a guest to access specific physical IRQs.
It is recommended to use this option only for trusted VMs under
administrator control.
=item B<max_event_channels=N>
Limit the guest to using at most N event channels (PV interrupts).
Guests use hypervisor resources for each event channel they use.
The default of 1023 should be sufficient for typical guests. The
maximum value depends what the guest supports. Guests supporting the
FIFO-based event channel ABI support up to 131,071 event channels.
Other guests are limited to 4095 (64-bit x86 and ARM) or 1023 (32-bit
x86).
=back
=head2 Paravirtualised (PV) Guest Specific Options
+5
View File
@@ -89,6 +89,11 @@
*/
#define LIBXL_HAVE_BUILDINFO_HVM_VENDOR_DEVICE 1
/*
* The libxl_domain_build_info has the event_channels field.
*/
#define LIBXL_HAVE_BUILDINFO_EVENT_CHANNELS 1
/*
* libxl ABI compatibility
*
+3
View File
@@ -208,6 +208,9 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
libxl_defbool_setdefault(&b_info->disable_migrate, false);
if (!b_info->event_channels)
b_info->event_channels = 1023;
switch (b_info->type) {
case LIBXL_DOMAIN_TYPE_HVM:
if (b_info->shadow_memkb == LIBXL_MEMKB_DEFAULT)
+7
View File
@@ -268,6 +268,13 @@ int libxl__build_post(libxl__gc *gc, uint32_t domid,
if (rc)
return rc;
rc = xc_domain_set_max_evtchn(ctx->xch, domid, info->event_channels);
if (rc) {
LOG(ERROR, "Failed to set event channel limit to %d (%d)",
info->event_channels, rc);
return ERROR_FAIL;
}
libxl_cpuid_apply_policy(ctx, domid);
if (info->cpuid != NULL)
libxl_cpuid_set(ctx, domid, info->cpuid);
+1
View File
@@ -312,6 +312,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
("irqs", Array(uint32, "num_irqs")),
("iomem", Array(libxl_iomem_range, "num_iomem")),
("claim_mode", libxl_defbool),
("event_channels", uint32),
("u", KeyedUnion(None, libxl_domain_type, "type",
[("hvm", Struct(None, [("firmware", string),
("bios", libxl_bios_type),
+3
View File
@@ -845,6 +845,9 @@ static void parse_config_data(const char *config_source,
if (!xlu_cfg_get_long (config, "videoram", &l, 0))
b_info->video_memkb = l * 1024;
if (!xlu_cfg_get_long(config, "max_event_channels", &l, 0))
b_info->event_channels = l;
switch(b_info->type) {
case LIBXL_DOMAIN_TYPE_HVM:
if (!xlu_cfg_get_string (config, "kernel", &buf, 0))
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.