On Mon, 23 Nov 2020 09:14:26 -0500
Paolo Bonzini <pbonz...@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 <pbonz...@redhat.com>

with a comment at qmp_x_exit_preconfig():
 Reviewed-by: Igor Mammedov <imamm...@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