On
 Tue, May 07, 2019 at 01:53:20PM +0000, Eslam Elnikety wrote:
Each HVM guest currently gets a vkbd frontend/backend pair (c/s ebbd2561b4c). 
This consumes host resources unnecessarily for guests that have no use for 
vkbd. Make this behaviour tunable to allow an administrator to choose. The 
commit retains the current behaviour -- HVM guests still get vkdb unless 
specified otherwise. 
 
Signed-off-by: Eslam Elnikety <elnikety@xxxxxxxxxx> 
 
--- 
   Changes in v2: 
       - Added a missing hunk / setting vkb_device per config 
--- 
tools/libxl/libxl_create.c  | 9 ++++++--- 
tools/libxl/libxl_types.idl | 1 + 
tools/xl/xl_parse.c         | 1 + 
tools/xl/xl_sxp.c           | 2 ++ 
4 files changed, 10 insertions(+), 3 deletions(-) 
 
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c 
index 89fe80fc9c..03ce166f4f 100644 
--- a/tools/libxl/libxl_create.c 
+++ b/tools/libxl/libxl_create.c 
@@ -310,6 +310,7 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, 
        libxl_defbool_setdefault(&b_info->u.hvm.vpt_align,          true); 
        libxl_defbool_setdefault(&b_info->u.hvm.altp2m,             false); 
        libxl_defbool_setdefault(&b_info->u.hvm.usb,                false); 
+        libxl_defbool_setdefault(&b_info->u.hvm.vkb_device,         true); 
        libxl_defbool_setdefault(&b_info->u.hvm.xen_platform_pci,   true); 
 
        libxl_defbool_setdefault(&b_info->u.hvm.spice.enable, false); 
@@ -1416,9 +1417,11 @@ static void domcreate_launch_dm(libxl__egc *egc, libxl__multidev *multidev, 
        libxl__device_console_add(gc, domid, &console, state, &device); 
        libxl__device_console_dispose(&console); 
 
-        libxl_device_vkb_init(&vkb); 
-        libxl__device_add(gc, domid, &libxl__vkb_devtype, &vkb); 
-        libxl_device_vkb_dispose(&vkb); 
+        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)) 
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl 
index b685ac47ac..9a0b92f1d4 100644 
--- a/tools/libxl/libxl_types.idl 
+++ b/tools/libxl/libxl_types.idl 
@@ -583,6 +583,7 @@ libxl_domain_build_info = Struct("domain_build_info",[ 
                                       # - "tablet" for absolute mouse, 
                                       # - "mouse" for PS/2 protocol relative mouse 
                                       ("usbdevice",        string), 
+                                       ("vkb_device",       libxl_defbool), 
                                       ("soundhw",          string), 
                                       ("xen_platform_pci", libxl_defbool), 
                                       ("usbdevice_list",   libxl_string_list), 
diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c 
index 352cd214dd..e105bda2bb 100644 
--- a/tools/xl/xl_parse.c 
+++ b/tools/xl/xl_parse.c 
@@ -2652,6 +2652,7 @@ skip_usbdev: 
            fprintf(stderr,"xl: Unable to parse usbdevice.\n"); 
            exit(-ERROR_FAIL); 
        } 
+        xlu_cfg_get_defbool(config, "vkb_device", &b_info->u.hvm.vkb_device, 0); 
        xlu_cfg_replace_string (config, "soundhw", &b_info->u.hvm.soundhw, 0); 
        xlu_cfg_get_defbool(config, "xen_platform_pci", 
                            &b_info->u.hvm.xen_platform_pci, 0); 
 
Oh
 here it is the code which uses the new field -- in that case, you
also
 need to document this in xl manpage.
The
 manpage is docs/man/xl.conf.pod.5.
Sorry
 for not having mentioned this earlier: we also ask for an
accompanying
 macro for the new field in the public interface. See
various
 LIBXL_HAVE macros in libxl.h.
Let
 me know if you have further questions.
Wei. 
 
 
 
Thanks for the feedback. Sending v3 now. 
 
 
Cheers, 
Eslam 
 
 
 |