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