mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
libxl: Use vkb=[] for HVMs
xl/libxl only applies vkb=[] to PV & PVH guests. HVM gets only a single vkb by default, but that can be disabled by the vkb_device boolean. Notably the HVM vkb cannot be configured, so feature-abs-pointer or the backend-type cannot be specified. Re-arrange the logic so that vkb=[] is handled regardless of domain type. If vkb is empty or unspecified, follow the vkb_device boolean for HVMs. Nothing changes for PVH & PV. HVMs can now get a configured vkb instead of just the default one. The chance for regression is an HVM config with vkb=["$something"] vkb_device=false Which would now get a vkb. This is useful for vGlass which provides a VKB to HVMs. vGlass wants to specify feature-abs-pointer, but that is racily written by vGlass instead of coming through the xl.cfg. Unhelpfully, Linux xen-kbdfront reads the backend nodes without checking that the backend is in InitWait. Signed-off-by: Jason Andryuk <jandryuk@gmail.com> Signed-off-by: Jason Andryuk <jason.andryuk@amd.com> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
This commit is contained in:
1 parent
2b31a1f055
commit
3c7482b73c
3 files changed
+18
-12
No files matched your search
@@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
||||
- On x86:
|
||||
- HVM PIRQs are disabled by default.
|
||||
- Reduce IOMMU setup time for hardware domain.
|
||||
- xl/libxl configures vkb=[] for HVM domains with priority over vkb_device.
|
||||
|
||||
### Added
|
||||
- On x86:
|
||||
|
||||
@@ -2710,6 +2710,8 @@ device.
|
||||
|
||||
Specifies that the HVM guest gets a vkdb. The default is true (1).
|
||||
|
||||
This option is only used when B<vkb=[]> is unset.
|
||||
|
||||
=item B<usb=BOOLEAN>
|
||||
|
||||
Enables or disables an emulated USB bus in the guest.
|
||||
|
||||
@@ -1769,24 +1769,32 @@ static void domcreate_launch_dm(libxl__egc *egc, libxl__multidev *multidev,
|
||||
libxl__device_add(gc, domid, &libxl__virtio_devtype,
|
||||
&d_config->virtios[i]);
|
||||
|
||||
if (d_config->num_vkbs) {
|
||||
for (i = 0; i < d_config->num_vkbs; i++) {
|
||||
ret = libxl__device_add(gc, domid, &libxl__vkb_devtype,
|
||||
&d_config->vkbs[i]);
|
||||
if (ret) goto error_out;
|
||||
}
|
||||
} else if (d_config->c_info.type == LIBXL_DOMAIN_TYPE_HVM &&
|
||||
libxl_defbool_val(d_config->b_info.u.hvm.vkb_device)) {
|
||||
libxl_device_vkb vkb;
|
||||
|
||||
libxl_device_vkb_init(&vkb);
|
||||
libxl__device_add(gc, domid, &libxl__vkb_devtype, &vkb);
|
||||
libxl_device_vkb_dispose(&vkb);
|
||||
}
|
||||
|
||||
switch (d_config->c_info.type) {
|
||||
case LIBXL_DOMAIN_TYPE_HVM:
|
||||
{
|
||||
libxl__device_console console;
|
||||
libxl__device device;
|
||||
libxl_device_vkb vkb;
|
||||
|
||||
init_console_info(gc, &console, 0);
|
||||
console.backend_domid = state->console_domid;
|
||||
libxl__device_console_add(gc, domid, &console, state, &device);
|
||||
libxl__device_console_dispose(&console);
|
||||
|
||||
if (libxl_defbool_val(d_config->b_info.u.hvm.vkb_device)) {
|
||||
libxl_device_vkb_init(&vkb);
|
||||
libxl__device_add(gc, domid, &libxl__vkb_devtype, &vkb);
|
||||
libxl_device_vkb_dispose(&vkb);
|
||||
}
|
||||
|
||||
dcs->sdss.dm.guest_domid = domid;
|
||||
if (libxl_defbool_val(d_config->b_info.device_model_stubdomain))
|
||||
libxl__spawn_stub_dm(egc, &dcs->sdss);
|
||||
@@ -1814,11 +1822,6 @@ static void domcreate_launch_dm(libxl__egc *egc, libxl__multidev *multidev,
|
||||
&d_config->vfbs[i]);
|
||||
}
|
||||
|
||||
for (i = 0; i < d_config->num_vkbs; i++) {
|
||||
libxl__device_add(gc, domid, &libxl__vkb_devtype,
|
||||
&d_config->vkbs[i]);
|
||||
}
|
||||
|
||||
if (d_config->b_info.arch_arm.vuart == LIBXL_VUART_TYPE_SBSA_UART) {
|
||||
init_console_info(gc, &vuart, 0);
|
||||
vuart.backend_domid = state->console_domid;
|
||||
|
||||