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 Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
d349f92f78
commit
632a887350
@ -1,7 +1,7 @@
|
|||||||
#ifndef QEMU_CONFIG_FILE_H
|
#ifndef QEMU_CONFIG_FILE_H
|
||||||
#define 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(const char *group);
|
||||||
QemuOptsList *qemu_find_opts_err(const char *group, Error **errp);
|
QemuOptsList *qemu_find_opts_err(const char *group, Error **errp);
|
||||||
QemuOpts *qemu_find_opts_singleton(const char *group);
|
QemuOpts *qemu_find_opts_singleton(const char *group);
|
||||||
|
21
softmmu/vl.c
21
softmmu/vl.c
@ -2627,6 +2627,23 @@ 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)
|
void qemu_init(int argc, char **argv, char **envp)
|
||||||
{
|
{
|
||||||
QemuOpts *opts;
|
QemuOpts *opts;
|
||||||
@ -3386,10 +3403,6 @@ void qemu_init(int argc, char **argv, char **envp)
|
|||||||
break;
|
break;
|
||||||
case QEMU_OPTION_spice:
|
case QEMU_OPTION_spice:
|
||||||
olist = qemu_find_opts_err("spice", NULL);
|
olist = qemu_find_opts_err("spice", NULL);
|
||||||
if (!olist) {
|
|
||||||
ui_module_load_one("spice-core");
|
|
||||||
olist = qemu_find_opts("spice");
|
|
||||||
}
|
|
||||||
if (!olist) {
|
if (!olist) {
|
||||||
error_report("spice support is disabled");
|
error_report("spice support is disabled");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -22,6 +22,7 @@ stub_ss.add(files('isa-bus.c'))
|
|||||||
stub_ss.add(files('is-daemonized.c'))
|
stub_ss.add(files('is-daemonized.c'))
|
||||||
stub_ss.add(when: 'CONFIG_LINUX_AIO', if_true: files('linux-aio.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('migr-blocker.c'))
|
||||||
|
stub_ss.add(files('module-opts.c'))
|
||||||
stub_ss.add(files('monitor.c'))
|
stub_ss.add(files('monitor.c'))
|
||||||
stub_ss.add(files('monitor-core.c'))
|
stub_ss.add(files('monitor-core.c'))
|
||||||
stub_ss.add(files('pci-bus.c'))
|
stub_ss.add(files('pci-bus.c'))
|
||||||
|
6
stubs/module-opts.c
Normal file
6
stubs/module-opts.c
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include "qemu/osdep.h"
|
||||||
|
#include "qemu/config-file.h"
|
||||||
|
|
||||||
|
void qemu_load_module_for_opts(const char *group)
|
||||||
|
{
|
||||||
|
}
|
@ -16,6 +16,7 @@ static QemuOptsList *find_list(QemuOptsList **lists, const char *group,
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
qemu_load_module_for_opts(group);
|
||||||
for (i = 0; lists[i] != NULL; i++) {
|
for (i = 0; lists[i] != NULL; i++) {
|
||||||
if (strcmp(lists[i]->name, group) == 0)
|
if (strcmp(lists[i]->name, group) == 0)
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user