qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 27/36] vl: remove separate preconfig main_loop


From: Igor Mammedov
Subject: Re: [PATCH 27/36] vl: remove separate preconfig main_loop
Date: Mon, 30 Nov 2020 13:46:04 +0100

On Mon, 23 Nov 2020 09:14:26 -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>

with a comment at qmp_x_exit_preconfig():
 Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
[...]
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index 95c62bdad4..aa11fc4871 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
[...]
> @@ -3517,6 +3507,43 @@ static void qemu_machine_creation_done(void)
>      register_global_state();
>  }
>  
> +void qmp_x_exit_preconfig(Error **errp)

this needs a comment that it shouldn't be split without taking care of
qmp commands that were allowed to be called before qemu_init_board(),
otherwise there would be nothing to remind us about it.

> +{
> +    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;
[...]




reply via email to

[Prev in Thread] Current Thread [Next in Thread]