[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [RFC PATCH v2 03/16] qapi: Implement x-machine-init QMP command
On Thu, Sep 23, 2021 at 2:17 AM Damien Hedde <damien.hedde@xxxxxxxxxxxxx> wrote: > > From: Mirela Grujic <mirela.grujic@xxxxxxxxxxxxx> > > The x-machine-init QMP command is available only if the -preconfig option > is used and the current machine initialization phase is accel-created. > > The command triggers QEMU to enter machine initialized phase and wait > for the QMP configuration. In future commits, we will add the possiblity > to create devices at this point. > > To exit the initialized phase use the x-exit-preconfig QMP command. > > Signed-off-by: Mirela Grujic <mirela.grujic@xxxxxxxxxxxxx> Acked-by: Alistair Francis <alistair.francis@xxxxxxx> Alistair > --- > qapi/machine.json | 23 +++++++++++++++++++++++ > softmmu/vl.c | 19 +++++++++++++++---- > 2 files changed, 38 insertions(+), 4 deletions(-) > > diff --git a/qapi/machine.json b/qapi/machine.json > index 969d37fb03..56330c0e8e 100644 > --- a/qapi/machine.json > +++ b/qapi/machine.json > @@ -1368,3 +1368,26 @@ > ## > { 'command': 'query-machine-phase', 'returns': 'MachineInitPhaseStatus', > 'allow-preconfig': true } > + > +## > +# @x-machine-init: > +# > +# Enter machine initialized phase > +# > +# Since: 6.2 > +# > +# Returns: If successful, nothing > +# > +# Notes: This command will trigger QEMU to execute initialization steps > +# that are required to enter the machine initialized phase. The > command > +# is available only if the -preconfig command line option was passed > and > +# if the machine is currently in the accel-created phase. To exit the > +# machine initialized phase use the x-exit-preconfig command. > +# > +# Example: > +# > +# -> { "execute": "x-machine-init" } > +# <- { "return": {} } > +# > +## > +{ 'command': 'x-machine-init', 'allow-preconfig': true } > diff --git a/softmmu/vl.c b/softmmu/vl.c > index d2552ba8ac..84c5132ad7 100644 > --- a/softmmu/vl.c > +++ b/softmmu/vl.c > @@ -123,6 +123,7 @@ > #include "qapi/qapi-visit-qom.h" > #include "qapi/qapi-commands-ui.h" > #include "qapi/qmp/qdict.h" > +#include "qapi/qapi-commands-machine.h" > #include "qapi/qmp/qerror.h" > #include "sysemu/iothread.h" > #include "qemu/guest-random.h" > @@ -2610,10 +2611,16 @@ static void qemu_init_displays(void) > } > } > > -static void qemu_init_board(void) > +void qmp_x_machine_init(Error **errp) > { > MachineClass *machine_class = MACHINE_GET_CLASS(current_machine); > > + if (phase_check(MACHINE_INIT_PHASE_INITIALIZED)) { > + error_setg(errp, "The command is permitted only before " > + "the machine is initialized"); > + return; > + } > + > if (machine_class->default_ram_id && current_machine->ram_size && > numa_uses_legacy_mem() && !current_machine->ram_memdev_id) { > create_default_memdev(current_machine, mem_path); > @@ -2692,12 +2699,16 @@ static void qemu_machine_creation_done(void) > > void qmp_x_exit_preconfig(Error **errp) > { > - if (phase_check(MACHINE_INIT_PHASE_INITIALIZED)) { > - error_setg(errp, "The command is permitted only before machine > initialization"); > + if (phase_check(MACHINE_INIT_PHASE_READY)) { > + error_setg(errp, "The command is permitted only before " > + "the machine is ready"); > return; > } > > - qemu_init_board(); > + if (!phase_check(MACHINE_INIT_PHASE_INITIALIZED)) { > + qmp_x_machine_init(errp); > + } > + > qemu_create_cli_devices(); > qemu_machine_creation_done(); > > -- > 2.33.0 > >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |