[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 02/15] vl: remove separate preconfig main_loop
From: |
Igor Mammedov |
Subject: |
Re: [PATCH 02/15] vl: remove separate preconfig main_loop |
Date: |
Mon, 7 Dec 2020 15:02:18 +0100 |
On Wed, 2 Dec 2020 03:18:41 -0500
Paolo Bonzini <pbonzini@redhat.com> wrote:
> 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.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> include/sysemu/runstate.h | 1 -
> monitor/qmp-cmds.c | 9 ----
> softmmu/vl.c | 95 +++++++++++++++++----------------------
> 3 files changed, 41 insertions(+), 64 deletions(-)
>
> 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 501a3024c7..7ced7eb3e8 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)
- [PATCH 00/15] Finish cleaning up qemu_init, Paolo Bonzini, 2020/12/02
- [PATCH 05/15] vl: extract softmmu/globals.c, Paolo Bonzini, 2020/12/02
- [PATCH 02/15] vl: remove separate preconfig main_loop, Paolo Bonzini, 2020/12/02
- Re: [PATCH 02/15] vl: remove separate preconfig main_loop,
Igor Mammedov <=
- [PATCH 04/15] vl: extract softmmu/runstate.c, Paolo Bonzini, 2020/12/02
- [PATCH 12/15] plugin: propagate errors, Paolo Bonzini, 2020/12/02
- [PATCH 13/15] memory: allow creating MemoryRegions before accelerators, Paolo Bonzini, 2020/12/02
- [PATCH 09/15] machine: record whether nvdimm= was set, Paolo Bonzini, 2020/12/02