[libvirt] [PATCH 14/15] qemu: conf: Add debug option to allow disabling qemu capabilities

Peter Krempa pkrempa at redhat.com
Tue Jun 18 13:10:23 UTC 2019


In cases when e.g. a new feature breaks upstream behaviour it's useful
to allow users to disable the new feature to verify the regression and
possibly use it as a workaround until a fix is available.

The new qemu.conf option named "capability_filters" allows to remove
qemu capabilities from the detected bitmap.

This patch introduces the configuration infrastructure to parse the
option and pass it around.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/libvirtd_qemu.aug         |  3 +++
 src/qemu/qemu.conf                 |  7 +++++++
 src/qemu/qemu_conf.c               | 17 +++++++++++++++++
 src/qemu/qemu_conf.h               |  2 ++
 src/qemu/test_libvirtd_qemu.aug.in |  3 +++
 5 files changed, 32 insertions(+)

diff --git a/src/qemu/libvirtd_qemu.aug b/src/qemu/libvirtd_qemu.aug
index b311f02da6..6821cc4a29 100644
--- a/src/qemu/libvirtd_qemu.aug
+++ b/src/qemu/libvirtd_qemu.aug
@@ -126,6 +126,8 @@ module Libvirtd_qemu =
    let swtpm_entry = str_entry "swtpm_user"
                 | str_entry "swtpm_group"

+   let capability_filters_entry = str_array_entry "capability_filters"
+
    (* Each entry in the config is one of the following ... *)
    let entry = default_tls_entry
              | vnc_entry
@@ -147,6 +149,7 @@ module Libvirtd_qemu =
              | vxhs_entry
              | nbd_entry
              | swtpm_entry
+             | capability_filters_entry

    let comment = [ label "#comment" . del /#[ \t]*/ "# " .  store /([^ \t\n][^\n]*)?/ . del /\n/ "\n" ]
    let empty = [ label "#empty" . eol ]
diff --git a/src/qemu/qemu.conf b/src/qemu/qemu.conf
index 5a85789d81..1969b3f0a1 100644
--- a/src/qemu/qemu.conf
+++ b/src/qemu/qemu.conf
@@ -825,3 +825,10 @@
 #
 #swtpm_user = "tss"
 #swtpm_group = "tss"
+
+# For debugging and testing purposes it's sometimes useful to be able to disable
+# libvirt behaviour based on the capabilities of the qemu process. This option
+# allows to do so. DO _NOT_ use in production and beaware that the behaviour
+# may change across versions.
+#
+#capability_filters = [ "capname" ]
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 745e0f21bd..8312f99f80 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -381,6 +381,8 @@ static void virQEMUDriverConfigDispose(void *obj)

     VIR_FREE(cfg->memoryBackingDir);
     VIR_FREE(cfg->swtpmStorageDir);
+
+    virStringListFree(cfg->capabilityfilters);
 }


@@ -984,6 +986,18 @@ virQEMUDriverConfigLoadSWTPMEntry(virQEMUDriverConfigPtr cfg,
 }


+static int
+virQEMUDriverConfigLoadCapsFiltersEntry(virQEMUDriverConfigPtr cfg,
+                                        virConfPtr conf)
+{
+    if (virConfGetValueStringList(conf, "capability_filters", false,
+                                  &cfg->capabilityfilters) < 0)
+        return -1;
+
+    return 0;
+}
+
+
 int virQEMUDriverConfigLoadFile(virQEMUDriverConfigPtr cfg,
                                 const char *filename,
                                 bool privileged)
@@ -1053,6 +1067,9 @@ int virQEMUDriverConfigLoadFile(virQEMUDriverConfigPtr cfg,
     if (virQEMUDriverConfigLoadSWTPMEntry(cfg, conf) < 0)
         goto cleanup;

+    if (virQEMUDriverConfigLoadCapsFiltersEntry(cfg, conf) < 0)
+        goto cleanup;
+
     ret = 0;

  cleanup:
diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index 386e774653..8bef009bc9 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -218,6 +218,8 @@ struct _virQEMUDriverConfig {

     uid_t swtpm_user;
     gid_t swtpm_group;
+
+    char **capabilityfilters;
 };

 /* Main driver state */
diff --git a/src/qemu/test_libvirtd_qemu.aug.in b/src/qemu/test_libvirtd_qemu.aug.in
index fea1d308b7..50b728ad22 100644
--- a/src/qemu/test_libvirtd_qemu.aug.in
+++ b/src/qemu/test_libvirtd_qemu.aug.in
@@ -104,3 +104,6 @@ module Test_libvirtd_qemu =
 { "pr_helper" = "/usr/bin/qemu-pr-helper" }
 { "swtpm_user" = "tss" }
 { "swtpm_group" = "tss" }
+{ "capability_filters"
+    { "1" = "capname" }
+}
-- 
2.21.0




More information about the libvir-list mailing list