| From 7b861d20e22278fc5915f03d77b83e07ba44d440 Mon Sep 17 00:00:00 2001 |
| From: Paolo Bonzini <pbonzini@redhat.com> |
| Date: Tue, 18 May 2021 09:15:42 -0400 |
| Subject: [PATCH 2/5] qemu-config: load modules when instantiating option |
| groups |
| |
| Right now the SPICE module is special cased to be loaded when processing |
| of the -spice command line option. However, the spice option group |
| can also be brought in via -readconfig, in which case the module is |
| not loaded. |
| |
| Add a generic hook to load modules that provide a QemuOpts group, |
| and use it for the "spice" and "iscsi" groups. |
| |
| Fixes: #194 |
| Fixes: https://bugs.launchpad.net/qemu/+bug/1910696 |
| Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
| Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> |
| Message-Id: <20210518131542.2941207-1-pbonzini@redhat.com> |
| Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
| |
| include/qemu/config-file.h | 2 +- |
| softmmu/vl.c | 21 +++++++++++++++++---- |
| stubs/meson.build | 1 + |
| stubs/module-opts.c | 6 ++++++ |
| util/qemu-config.c | 1 + |
| 5 files changed, 26 insertions(+), 5 deletions(-) |
| create mode 100644 stubs/module-opts.c |
| |
| diff --git a/include/qemu/config-file.h b/include/qemu/config-file.h |
| index 8d3e53a..0500b36 100644 |
| |
| |
| @@ -1,7 +1,7 @@ |
| #ifndef QEMU_CONFIG_FILE_H |
| #define QEMU_CONFIG_FILE_H |
| |
| - |
| +void qemu_load_module_for_opts(const char *group); |
| QemuOptsList *qemu_find_opts(const char *group); |
| QemuOptsList *qemu_find_opts_err(const char *group, Error **errp); |
| QemuOpts *qemu_find_opts_singleton(const char *group); |
| diff --git a/softmmu/vl.c b/softmmu/vl.c |
| index 29d6415..4641f08 100644 |
| |
| |
| @@ -2613,6 +2613,23 @@ void qmp_x_exit_preconfig(Error **errp) |
| } |
| } |
| |
| +#ifdef CONFIG_MODULES |
| +void qemu_load_module_for_opts(const char *group) |
| +{ |
| + static bool spice_tried = false; |
| + if (g_str_equal(group, "spice") && !spice_tried) { |
| + ui_module_load_one("spice-core"); |
| + spice_tried = true; |
| + } |
| + |
| + static bool iscsi_tried = false; |
| + 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; |
| @@ -3372,10 +3389,6 @@ void qemu_init(int argc, char **argv, char **envp) |
| break; |
| case QEMU_OPTION_spice: |
| olist = qemu_find_opts_err("spice", NULL); |
| - if (!olist) { |
| - ui_module_load_one("spice-core"); |
| - olist = qemu_find_opts("spice"); |
| - } |
| if (!olist) { |
| error_report("spice support is disabled"); |
| exit(1); |
| diff --git a/stubs/meson.build b/stubs/meson.build |
| index be6f6d6..5555b69 100644 |
| |
| |
| @@ -22,6 +22,7 @@ stub_ss.add(files('isa-bus.c')) |
| stub_ss.add(files('is-daemonized.c')) |
| stub_ss.add(when: 'CONFIG_LINUX_AIO', if_true: files('linux-aio.c')) |
| stub_ss.add(files('migr-blocker.c')) |
| +stub_ss.add(files('module-opts.c')) |
| stub_ss.add(files('monitor.c')) |
| stub_ss.add(files('monitor-core.c')) |
| stub_ss.add(files('pci-bus.c')) |
| diff --git a/stubs/module-opts.c b/stubs/module-opts.c |
| new file mode 100644 |
| index 0000000..a7d0e4a |
| |
| |
| @@ -0,0 +1,6 @@ |
| +#include "qemu/osdep.h" |
| +#include "qemu/config-file.h" |
| + |
| +void qemu_load_module_for_opts(const char *group) |
| +{ |
| +} |
| diff --git a/util/qemu-config.c b/util/qemu-config.c |
| index 670bd6e..34974c4 100644 |
| |
| |
| @@ -16,6 +16,7 @@ static QemuOptsList *find_list(QemuOptsList **lists, const char *group, |
| { |
| int i; |
| |
| + qemu_load_module_for_opts(group); |
| for (i = 0; lists[i] != NULL; i++) { |
| if (strcmp(lists[i]->name, group) == 0) |
| break; |
| -- |
| 2.31.1 |
| |