[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 071/113] vl: initialize displays before preconfig loop
From: |
Paolo Bonzini |
Subject: |
[PULL 071/113] vl: initialize displays before preconfig loop |
Date: |
Wed, 2 Dec 2020 03:08:07 -0500 |
Displays should be available before the monitor starts, so that
it is possible to use the graphical console to interact with
the monitor itself.
This patch is quite ugly, but all this is temporary. The double
call to qemu_init_displays will go away as soon we can unify machine
initialization between the preconfig and "normal" flows, and so will
the preconfig_exit_requested variable (that is only preconfig_requested
remains).
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
softmmu/vl.c | 57 +++++++++++++++++++++++++++++++++-------------------
1 file changed, 36 insertions(+), 21 deletions(-)
diff --git a/softmmu/vl.c b/softmmu/vl.c
index 891f959572..6a2972938d 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -137,6 +137,7 @@ static ram_addr_t maxram_size;
static uint64_t ram_slots;
static int display_remote;
static int snapshot;
+static bool preconfig_requested;
static QemuPluginList plugin_list = QTAILQ_HEAD_INITIALIZER(plugin_list);
static BlockdevOptionsQueue bdo_queue = QSIMPLEQ_HEAD_INITIALIZER(bdo_queue);
static bool nographic = false;
@@ -3223,12 +3224,12 @@ static void qemu_validate_options(void)
}
}
- if (loadvm && !preconfig_exit_requested) {
+ if (loadvm && preconfig_requested) {
error_report("'preconfig' and 'loadvm' options are "
"mutually exclusive");
exit(EXIT_FAILURE);
}
- if (incoming && !preconfig_exit_requested) {
+ if (incoming && preconfig_requested) {
error_report("'preconfig' and 'incoming' options are "
"mutually exclusive");
exit(EXIT_FAILURE);
@@ -3392,6 +3393,28 @@ static void qemu_init_subsystems(void)
socket_init();
}
+static void qemu_init_displays(void)
+{
+ DisplayState *ds;
+
+ /* init local displays */
+ ds = init_displaystate();
+ qemu_display_init(ds, &dpy);
+
+ /* must be after terminal init, SDL library changes signal handlers */
+ os_setup_signal_handling();
+
+ /* init remote displays */
+#ifdef CONFIG_VNC
+ qemu_opts_foreach(qemu_find_opts("vnc"),
+ vnc_init_func, NULL, &error_fatal);
+#endif
+
+ if (using_spice) {
+ qemu_spice.display_init();
+ }
+}
+
/*
* Called after leaving preconfig state. From here on runstate is
* RUN_STATE_PRELAUNCH or RUN_STATE_INMIGRATE.
@@ -3450,8 +3473,6 @@ static void qemu_create_cli_devices(void)
static void qemu_machine_creation_done(void)
{
- DisplayState *ds;
-
cpu_synchronize_all_post_init();
/* Did we create any drives that we failed to create a device for? */
@@ -3474,23 +3495,6 @@ static void qemu_machine_creation_done(void)
qemu_register_reset(restore_boot_order, g_strdup(boot_order));
}
- /* init local displays */
- ds = init_displaystate();
- qemu_display_init(ds, &dpy);
-
- /* must be after terminal init, SDL library changes signal handlers */
- os_setup_signal_handling();
-
- /* init remote displays */
-#ifdef CONFIG_VNC
- qemu_opts_foreach(qemu_find_opts("vnc"),
- vnc_init_func, NULL, &error_fatal);
-#endif
-
- if (using_spice) {
- qemu_spice.display_init();
- }
-
if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) {
exit(1);
}
@@ -4090,6 +4094,7 @@ void qemu_init(int argc, char **argv, char **envp)
break;
case QEMU_OPTION_preconfig:
preconfig_exit_requested = false;
+ preconfig_requested = true;
break;
case QEMU_OPTION_enable_kvm:
olist = qemu_find_opts("machine");
@@ -4513,11 +4518,21 @@ void qemu_init(int argc, char **argv, char **envp)
qemu_resolve_machine_memdev();
parse_numa_opts(current_machine);
+ if (preconfig_requested) {
+ qemu_init_displays();
+ }
+
/* do monitor/qmp handling at preconfig state if requested */
qemu_main_loop();
qemu_init_board();
+
qemu_create_cli_devices();
+
+ /* initialize displays after all errors have been reported */
+ if (!preconfig_requested) {
+ qemu_init_displays();
+ }
qemu_machine_creation_done();
if (loadvm) {
--
2.26.2
- [PULL 054/113] vl: split various early command line options to a separate function, (continued)
- [PULL 054/113] vl: split various early command line options to a separate function, Paolo Bonzini, 2020/12/02
- [PULL 058/113] vl: extract various command line validation snippets to a new function, Paolo Bonzini, 2020/12/02
- [PULL 039/113] i386: do not use ram_size global, Paolo Bonzini, 2020/12/02
- [PULL 047/113] s390x: do not use ram_size global, Paolo Bonzini, 2020/12/02
- [PULL 055/113] vl: move various initialization routines out of qemu_init, Paolo Bonzini, 2020/12/02
- [PULL 062/113] vl: create "-net nic -net user" default earlier, Paolo Bonzini, 2020/12/02
- [PULL 057/113] vl: move prelaunch part of qemu_init to new functions, Paolo Bonzini, 2020/12/02
- [PULL 059/113] vl: preconfig and loadvm are mutually exclusive, Paolo Bonzini, 2020/12/02
- [PULL 050/113] hw/char/serial: Clean up unnecessary code, Paolo Bonzini, 2020/12/02
- [PULL 064/113] vl: extract default devices to separate functions, Paolo Bonzini, 2020/12/02
- [PULL 071/113] vl: initialize displays before preconfig loop,
Paolo Bonzini <=
- [PULL 070/113] vl: separate qemu_resolve_machine_memdev, Paolo Bonzini, 2020/12/02
- [PULL 066/113] vl: separate qemu_create_early_backends, Paolo Bonzini, 2020/12/02
- [PULL 076/113] vl: extract softmmu/datadir.c, Paolo Bonzini, 2020/12/02
- [PULL 080/113] vl: clean up -boot variables, Paolo Bonzini, 2020/12/02
- [PULL 074/113] vl: start VM via qmp_cont, Paolo Bonzini, 2020/12/02
- [PULL 084/113] kernel-doc: add support for ____cacheline_aligned_in_smp attribute, Paolo Bonzini, 2020/12/02
- [PULL 086/113] scripts: kernel-doc: proper handle @foo->bar(), Paolo Bonzini, 2020/12/02
- [PULL 088/113] scripts: kernel-doc: accept blank lines on parameter description, Paolo Bonzini, 2020/12/02
- [PULL 090/113] scripts/kernel-doc: parse __ETHTOOL_DECLARE_LINK_MODE_MASK, Paolo Bonzini, 2020/12/02
- [PULL 087/113] scripts: kernel-doc: accept negation like !@var, Paolo Bonzini, 2020/12/02