@@ -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;