On 18/06/21 06:53, Gerd Hoffmann wrote:
Use module database to figure which module adds given QemuOpts group.

Signed-off-by: Gerd Hoffmann <kra...@redhat.com>
---
  softmmu/vl.c        | 17 -----------------
  stubs/module-opts.c |  4 ----
  util/module.c       | 19 +++++++++++++++++++
  3 files changed, 19 insertions(+), 21 deletions(-)

diff --git a/softmmu/vl.c b/softmmu/vl.c
index a4857ec43ff3..c91d63e3cc02 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -2675,23 +2675,6 @@ void qmp_x_exit_preconfig(Error **errp)
      }
  }
-#ifdef CONFIG_MODULES
-void qemu_load_module_for_opts(const char *group)
-{
-    static bool spice_tried;
-    if (g_str_equal(group, "spice") && !spice_tried) {
-        ui_module_load_one("spice-core");
-        spice_tried = true;
-    }
-
-    static bool iscsi_tried;
-    if (g_str_equal(group, "iscsi") && !iscsi_tried) {
-        block_module_load_one("iscsi");
-        iscsi_tried = true;
-    }
-}
-#endif
-
  void qemu_init(int argc, char **argv, char **envp)
  {
      QemuOpts *opts;
diff --git a/stubs/module-opts.c b/stubs/module-opts.c
index a7d0e4ad6ead..5412429ea869 100644
--- a/stubs/module-opts.c
+++ b/stubs/module-opts.c
@@ -1,6 +1,2 @@
  #include "qemu/osdep.h"
  #include "qemu/config-file.h"
-
-void qemu_load_module_for_opts(const char *group)
-{
-}
diff --git a/util/module.c b/util/module.c
index 745ae0fb20ed..a9ec2da9972e 100644
--- a/util/module.c
+++ b/util/module.c
@@ -20,6 +20,7 @@
  #include "qemu/queue.h"
  #include "qemu/module.h"
  #include "qemu/cutils.h"
+#include "qemu/config-file.h"
  #ifdef CONFIG_MODULE_UPGRADES
  #include "qemu-version.h"
  #endif
@@ -322,8 +323,26 @@ void module_load_qom_all(void)
      module_loaded_qom_all = true;
  }
+void qemu_load_module_for_opts(const char *group)
+{
+    const QemuModinfo *modinfo;
+    const char **sl;
+
+    for (modinfo = module_info; modinfo->name != NULL; modinfo++) {
+        if (!modinfo->opts) {
+            continue;
+        }
+        for (sl = modinfo->opts; *sl != NULL; sl++) {
+            if (strcmp(group, *sl) == 0) {
+                module_load_one("", modinfo->name, false);
+            }
+        }
+    }
+}
+
  #else
+void qemu_load_module_for_opts(const char *group) {}
  void module_load_qom_one(const char *type) {}
  void module_load_qom_all(void) {}

Reviewed-by: Paolo Bonzini <pbonz...@redhat.com>


Reply via email to