[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
>
>



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.