[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] libxl: Use vkb=[] for HVMs
commit 3c7482b73c5aa38e7faecccd649c67093001d3b5 Author: Jason Andryuk <jandryuk@xxxxxxxxx> AuthorDate: Sun Apr 7 10:32:08 2024 -0400 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Thu Apr 11 16:39:10 2024 +0100 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@xxxxxxxxx> Signed-off-by: Jason Andryuk <jason.andryuk@xxxxxxx> Reviewed-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> --- CHANGELOG.md | 1 + docs/man/xl.cfg.5.pod.in | 2 ++ tools/libs/light/libxl_create.c | 27 +++++++++++++++------------ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93fda73c00..8041cfb7d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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: diff --git a/docs/man/xl.cfg.5.pod.in b/docs/man/xl.cfg.5.pod.in index 039e057318..8f2b375ce9 100644 --- a/docs/man/xl.cfg.5.pod.in +++ b/docs/man/xl.cfg.5.pod.in @@ -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. diff --git a/tools/libs/light/libxl_create.c b/tools/libs/light/libxl_create.c index 5546335973..41252ec553 100644 --- a/tools/libs/light/libxl_create.c +++ b/tools/libs/light/libxl_create.c @@ -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; -- generated by git-patchbot for /home/xen/git/xen.git#staging
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |