[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PULL 02/45] vl: remove separate preconfig main_loop
From: |
Laurent Vivier |
Subject: |
Re: [PULL 02/45] vl: remove separate preconfig main_loop |
Date: |
Sat, 19 Dec 2020 22:30:04 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 |
Le 15/12/2020 à 18:54, Paolo Bonzini a écrit :
> Move post-preconfig initialization to the x-exit-preconfig. If preconfig
> is not requested, just exit preconfig mode immediately with the QMP
> command.
>
> As a result, the preconfig loop will run with accel_setup_post
> and os_setup_post restrictions (xen_restrict, chroot, etc.)
> already done.
>
> Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> include/sysemu/runstate.h | 1 -
> monitor/qmp-cmds.c | 9 ----
> softmmu/vl.c | 95 +++++++++++++++++----------------------
> 3 files changed, 41 insertions(+), 64 deletions(-)
Moving the qemu_init_displays() before qemu_create_cli_devices() breaks the
display when the graphic
card is provided by the cli.
Try:
qemu-system-x86_64 -device virtio-gpu-pci
-> we don't have any display, only the parallel port output...
Then:
diff --git a/softmmu/vl.c b/softmmu/vl.c
index 0ed5c5ba9348..2f198e0023e0 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -2525,6 +2525,7 @@ void qmp_x_exit_preconfig(Error **errp)
qemu_init_board();
qemu_create_cli_devices();
+ qemu_init_displays();
qemu_machine_creation_done();
if (loadvm) {
@@ -3529,7 +3530,6 @@ void qemu_init(int argc, char **argv, char **envp)
exit(0);
}
- qemu_init_displays();
if (!preconfig_requested) {
qmp_x_exit_preconfig(&error_fatal);
}
and then re-try:
qemu-system-x86_64 -device virtio-gpu-pci
-> we have the BIOS boot screen.
Any idea?
Thanks,
Laurent
> diff --git a/include/sysemu/runstate.h b/include/sysemu/runstate.h
> index f760094858..e557f470d4 100644
> --- a/include/sysemu/runstate.h
> +++ b/include/sysemu/runstate.h
> @@ -41,7 +41,6 @@ typedef enum WakeupReason {
> QEMU_WAKEUP_REASON_OTHER,
> } WakeupReason;
>
> -void qemu_exit_preconfig_request(void);
> void qemu_system_reset_request(ShutdownCause reason);
> void qemu_system_suspend_request(void);
> void qemu_register_suspend_notifier(Notifier *notifier);
> diff --git a/monitor/qmp-cmds.c b/monitor/qmp-cmds.c
> index 639a219294..d141aaa132 100644
> --- a/monitor/qmp-cmds.c
> +++ b/monitor/qmp-cmds.c
> @@ -102,15 +102,6 @@ void qmp_system_powerdown(Error **errp)
> qemu_system_powerdown_request();
> }
>
> -void qmp_x_exit_preconfig(Error **errp)
> -{
> - if (qdev_hotplug) {
> - error_setg(errp, "The command is permitted only before machine
> initialization");
> - return;
> - }
> - qemu_exit_preconfig_request();
> -}
> -
> void qmp_cont(Error **errp)
> {
> BlockBackend *blk;
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index ab2210bc79..abbbb83e1a 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -1151,7 +1151,6 @@ static pid_t shutdown_pid;
> static int powerdown_requested;
> static int debug_requested;
> static int suspend_requested;
> -static bool preconfig_exit_requested = true;
> static WakeupReason wakeup_reason;
> static NotifierList powerdown_notifiers =
> NOTIFIER_LIST_INITIALIZER(powerdown_notifiers);
> @@ -1238,11 +1237,6 @@ static int qemu_debug_requested(void)
> return r;
> }
>
> -void qemu_exit_preconfig_request(void)
> -{
> - preconfig_exit_requested = true;
> -}
> -
> /*
> * Reset the VM. Issue an event unless @reason is SHUTDOWN_CAUSE_NONE.
> */
> @@ -1464,10 +1458,6 @@ static bool main_loop_should_exit(void)
> RunState r;
> ShutdownCause request;
>
> - if (preconfig_exit_requested) {
> - preconfig_exit_requested = false;
> - return true;
> - }
> if (qemu_debug_requested()) {
> vm_stop(RUN_STATE_DEBUG);
> }
> @@ -3283,6 +3273,43 @@ static void qemu_machine_creation_done(void)
> register_global_state();
> }
>
> +void qmp_x_exit_preconfig(Error **errp)
> +{
> + if (qdev_hotplug) {
> + error_setg(errp, "The command is permitted only before machine
> initialization");
> + return;
> + }
> +
> + qemu_init_board();
> + qemu_create_cli_devices();
> + qemu_machine_creation_done();
> +
> + if (loadvm) {
> + Error *local_err = NULL;
> + if (load_snapshot(loadvm, &local_err) < 0) {
> + error_report_err(local_err);
> + autostart = 0;
> + exit(1);
> + }
> + }
> + if (replay_mode != REPLAY_MODE_NONE) {
> + replay_vmstate_init();
> + }
> +
> + if (incoming) {
> + Error *local_err = NULL;
> + if (strcmp(incoming, "defer") != 0) {
> + qmp_migrate_incoming(incoming, &local_err);
> + if (local_err) {
> + error_reportf_err(local_err, "-incoming %s: ", incoming);
> + exit(1);
> + }
> + }
> + } else if (autostart) {
> + qmp_cont(NULL);
> + }
> +}
> +
> void qemu_init(int argc, char **argv, char **envp)
> {
> QemuOpts *opts;
> @@ -3847,7 +3874,6 @@ 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:
> @@ -4272,57 +4298,18 @@ 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) {
> - Error *local_err = NULL;
> - if (load_snapshot(loadvm, &local_err) < 0) {
> - error_report_err(local_err);
> - autostart = 0;
> - exit(1);
> - }
> - }
> - if (replay_mode != REPLAY_MODE_NONE) {
> - replay_vmstate_init();
> - }
> -
> if (vmstate_dump_file) {
> /* dump and exit */
> dump_vmstate_json_to_file(vmstate_dump_file);
> exit(0);
> }
> - if (incoming) {
> - Error *local_err = NULL;
> - if (strcmp(incoming, "defer") != 0) {
> - qmp_migrate_incoming(incoming, &local_err);
> - if (local_err) {
> - error_reportf_err(local_err, "-incoming %s: ", incoming);
> - exit(1);
> - }
> - }
> - } else if (autostart) {
> - qmp_cont(NULL);
> - }
>
> + qemu_init_displays();
> + if (!preconfig_requested) {
> + qmp_x_exit_preconfig(&error_fatal);
> + }
> accel_setup_post(current_machine);
> os_setup_post();
> -
> - return;
> }
>
> void qemu_cleanup(void)
>
- [PULL 00/45] Misc patches for 2020-12-15, Paolo Bonzini, 2020/12/15
- [PULL 03/45] vl: allow -incoming defer with -preconfig, Paolo Bonzini, 2020/12/15
- [PULL 02/45] vl: remove separate preconfig main_loop, Paolo Bonzini, 2020/12/15
- Re: [PULL 02/45] vl: remove separate preconfig main_loop,
Laurent Vivier <=
- [PULL 05/45] vl: extract softmmu/globals.c, Paolo Bonzini, 2020/12/15
- [PULL 06/45] vl: move all generic initialization out of vl.c, Paolo Bonzini, 2020/12/15
- [PULL 08/45] machine: introduce MachineInitPhase, Paolo Bonzini, 2020/12/15
- [PULL 09/45] ppc/spapr: cleanup -machine pseries,nvdimm=X handling, Paolo Bonzini, 2020/12/15
- [PULL 01/45] remove preconfig state, Paolo Bonzini, 2020/12/15
- [PULL 04/45] vl: extract softmmu/runstate.c, Paolo Bonzini, 2020/12/15
- [PULL 12/45] memory: allow creating MemoryRegions before accelerators, Paolo Bonzini, 2020/12/15
- [PULL 11/45] plugin: propagate errors, Paolo Bonzini, 2020/12/15
- [PULL 14/45] qmp: generalize watchdog-set-action to -no-reboot/-no-shutdown, Paolo Bonzini, 2020/12/15