[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 22/29] vl: initialize displays before preconfig loop
From: |
Paolo Bonzini |
Subject: |
[PATCH 22/29] vl: initialize displays before preconfig loop |
Date: |
Tue, 27 Oct 2020 14:21:37 -0400 |
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).
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
softmmu/vl.c | 58 ++++++++++++++++++++++++++++++++--------------------
1 file changed, 36 insertions(+), 22 deletions(-)
diff --git a/softmmu/vl.c b/softmmu/vl.c
index 1485aba8be..a46f1b9164 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;
@@ -3210,12 +3211,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);
@@ -3381,6 +3382,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.
@@ -3449,8 +3472,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? */
@@ -3473,23 +3494,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);
}
@@ -4094,6 +4098,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");
@@ -4515,11 +4520,20 @@ 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_finish_machine_init();
+
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
- [PATCH 13/29] vl: load plugins as late as possible, (continued)
- [PATCH 13/29] vl: load plugins as late as possible, Paolo Bonzini, 2020/10/27
- [PATCH 03/29] vl: extract validation of -smp to machine.c, Paolo Bonzini, 2020/10/27
- [PATCH 09/29] vl: extract various command line validation snippets to a new function, Paolo Bonzini, 2020/10/27
- [PATCH 11/29] vl: extract various command line desugaring snippets to a new function, Paolo Bonzini, 2020/10/27
- [PATCH 01/29] trace: remove argument from trace_init_file, Paolo Bonzini, 2020/10/27
- [PATCH 08/29] vl: move prelaunch part of qemu_init to new functions, Paolo Bonzini, 2020/10/27
- [PATCH 15/29] vl: extract default devices to separate functions, Paolo Bonzini, 2020/10/27
- [PATCH 23/29] vl: move -global check earlier, Paolo Bonzini, 2020/10/27
- [PATCH 16/29] vl: move CHECKPOINT_INIT after preconfig, Paolo Bonzini, 2020/10/27
- [PATCH 20/29] vl: separate qemu_apply_machine_options, Paolo Bonzini, 2020/10/27
- [PATCH 22/29] vl: initialize displays before preconfig loop,
Paolo Bonzini <=
- [PATCH 12/29] vl: create "-net nic -net user" default earlier, Paolo Bonzini, 2020/10/27
- [PATCH 21/29] vl: separate qemu_resolve_machine_memdev, Paolo Bonzini, 2020/10/27
- [PATCH 24/29] migration, vl: start migration via qmp_migrate_incoming, Paolo Bonzini, 2020/10/27
- [PATCH 14/29] vl: move semihosting command line fallback to qemu_finish_machine_init, Paolo Bonzini, 2020/10/27
- [PATCH 29/29] vl: allow -incoming defer with -preconfig, Paolo Bonzini, 2020/10/27
- [PATCH 28/29] vl: remove separate preconfig main_loop, Paolo Bonzini, 2020/10/27
- [PATCH 18/29] vl: separate qemu_create_late_backends, Paolo Bonzini, 2020/10/27
- [PATCH 26/29] hmp: introduce cmd_available, Paolo Bonzini, 2020/10/27
- [PATCH 25/29] vl: start VM via qmp_cont, Paolo Bonzini, 2020/10/27
- [PATCH 17/29] vl: separate qemu_create_early_backends, Paolo Bonzini, 2020/10/27