All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Annie Li <annie.li@oracle.com>
Cc: qemu-devel@nongnu.org,  imammedo@redhat.com,  miguel.luis@oracle.com
Subject: Re: [RFC PATCH 01/11] acpi: hmp/qmp: Add hmp/qmp support for system_sleep
Date: Tue, 05 Dec 2023 21:34:28 +0100	[thread overview]
Message-ID: <87r0k075ij.fsf@pond.sub.org> (raw)
In-Reply-To: <20231205002356.1239-1-annie.li@oracle.com> (Annie Li's message of "Tue, 5 Dec 2023 00:23:56 +0000")

You neglected to cc: QAPI schema maintainers.  I found it by chance.
Next time :)

Annie Li <annie.li@oracle.com> writes:

> Following hmp/qmp commands are implemented for pressing virtual
> sleep button,
>
> hmp: system_sleep
> qmp: { "execute": "system_sleep" }
>
> These commands put the guest into suspend or other power states
> depending on the power settings inside the guest.

How is this related to system_wakeup?

> Signed-off-by: Annie Li <annie.li@oracle.com>
> ---
>  hmp-commands.hx            | 14 ++++++++++++++
>  hw/core/machine-hmp-cmds.c |  5 +++++
>  hw/core/machine-qmp-cmds.c |  9 +++++++++
>  include/monitor/hmp.h      |  1 +
>  qapi/machine.json          | 18 ++++++++++++++++++
>  qapi/pragma.json           |  1 +
>  6 files changed, 48 insertions(+)
>
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index 765349ed14..bd01e49ec5 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -652,6 +652,20 @@ SRST
>    whether profiling is on or off.
>  ERST
>  
> +    {
> +        .name       = "system_sleep",
> +        .args_type  = "",
> +        .params     = "",
> +        .help       = "send ACPI sleep event",

Suggest "push the virtual sleep button", because it's easier to
understand, and consistent with the documentation below.

> +        .cmd = hmp_system_sleep,
> +    },
> +
> +SRST
> +``system_sleep``
> +  Push the virtual sleep button; if supported the system will enter
> +  an ACPI sleep state.
> +ERST
> +
>      {
>          .name       = "system_reset",
>          .args_type  = "",
> diff --git a/hw/core/machine-hmp-cmds.c b/hw/core/machine-hmp-cmds.c
> index a6ff6a4875..641a365e3e 100644
> --- a/hw/core/machine-hmp-cmds.c
> +++ b/hw/core/machine-hmp-cmds.c
> @@ -185,6 +185,11 @@ void hmp_system_reset(Monitor *mon, const QDict *qdict)
>      qmp_system_reset(NULL);
>  }
>  
> +void hmp_system_sleep(Monitor *mon, const QDict *qdict)
> +{
> +    qmp_system_sleep(NULL);
> +}
> +
>  void hmp_system_powerdown(Monitor *mon, const QDict *qdict)
>  {
>      qmp_system_powerdown(NULL);
> diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c
> index 3860a50c3b..9f1e636c90 100644
> --- a/hw/core/machine-qmp-cmds.c
> +++ b/hw/core/machine-qmp-cmds.c
> @@ -257,6 +257,15 @@ void qmp_system_reset(Error **errp)
>      qemu_system_reset_request(SHUTDOWN_CAUSE_HOST_QMP_SYSTEM_RESET);
>  }
>  
> +void qmp_system_sleep(Error **errp)
> +{
> +    if (!qemu_wakeup_suspend_enabled()) {
> +        error_setg(errp,
> +                   "suspend from running is not supported by this guest");
> +        return;
> +    }

This can't be right: it either fails or does nothing.

I guess you're leaving the "do something" part to later patches.  That's
okay, but it needs a TODO comment here, and a prominent mention in the
commit message.

> +}
> +
>  void qmp_system_powerdown(Error **errp)
>  {
>      qemu_system_powerdown_request();
> diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h
> index 13f9a2dedb..d72a3b775c 100644
> --- a/include/monitor/hmp.h
> +++ b/include/monitor/hmp.h
> @@ -45,6 +45,7 @@ void hmp_quit(Monitor *mon, const QDict *qdict);
>  void hmp_stop(Monitor *mon, const QDict *qdict);
>  void hmp_sync_profile(Monitor *mon, const QDict *qdict);
>  void hmp_system_reset(Monitor *mon, const QDict *qdict);
> +void hmp_system_sleep(Monitor *mon, const QDict *qdict);
>  void hmp_system_powerdown(Monitor *mon, const QDict *qdict);
>  void hmp_exit_preconfig(Monitor *mon, const QDict *qdict);
>  void hmp_announce_self(Monitor *mon, const QDict *qdict);
> diff --git a/qapi/machine.json b/qapi/machine.json
> index b6d634b30d..3ac69df92f 100644
> --- a/qapi/machine.json
> +++ b/qapi/machine.json
> @@ -297,6 +297,24 @@
>  ##
>  { 'command': 'system_reset' }
>  
> +##
> +# @system_sleep:
> +#
> +# Requests that a guest perform a ACPI sleep transition by pushing a virtual
> +# sleep button.

Imperative mood, please: "Request that ..."

I think "the guest" would be better.

Limit line length to 70, please.

> +#
> +# Notes: A guest may or may not respond to this command. This command
> +#        returning does not indicate that a guest has accepted the request
> +#        or that it has gone to sleep.

Please format like

    # Notes: A guest may or may not respond to this command.  This command
    #    returning does not indicate that a guest has accepted the request
    #    or that it has gone to sleep.
  
> +#
> +# Example:
> +#
> +# -> { "execute": "system_sleep" }
> +# <- { "return": {} }
> +#
> +##
> +{ 'command': 'system_sleep' }
> +
>  ##
>  # @system_powerdown:
>  #
> diff --git a/qapi/pragma.json b/qapi/pragma.json
> index 0aa4eeddd3..ef15229854 100644
> --- a/qapi/pragma.json
> +++ b/qapi/pragma.json
> @@ -23,6 +23,7 @@
>          'set_password',
>          'system_powerdown',
>          'system_reset',
> +        'system_sleep',
>          'system_wakeup' ],
>      # Commands allowed to return a non-dictionary
>      'command-returns-exceptions': [

I figure you spell system_sleep with '_' instead of '-' for consistency
with existing system_FOO commands.  That's okay, but I recommend to
point it out in the commit message.



  parent reply	other threads:[~2023-12-05 20:35 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-05  0:21 [RFC PATCH 00/11] Support ACPI Control Method Sleep button Annie Li
2023-12-05  0:23 ` [RFC PATCH 01/11] acpi: hmp/qmp: Add hmp/qmp support for system_sleep Annie Li
2023-12-05  9:44   ` Philippe Mathieu-Daudé
2023-12-05 14:43     ` Annie.li
2023-12-05 20:34   ` Markus Armbruster [this message]
2023-12-05 21:46     ` Annie.li
2023-12-22 12:37       ` Markus Armbruster
2023-12-22 18:39         ` Annie.li
2023-12-05  0:26 ` [RFC PATCH 02/11] acpi: Implement control method sleep button Annie Li
2023-12-05  0:26 ` [RFC PATCH 03/11] test/acpi: allow DSDT table changes Annie Li
2023-12-05  0:27 ` [RFC PATCH 04/11] acpi: Support Control Method sleep button for x86 Annie Li
2023-12-05  0:27 ` [RFC PATCH 05/11] tests/acpi/bios-tables-test: update DSDT tables for Control Method Sleep button Annie Li
2023-12-05  0:28 ` [RFC PATCH 06/11] acpi: Send the GPE event of suspend and wakeup for x86 Annie Li
2023-12-05  0:28 ` [RFC PATCH 07/11] hw/acpi: Add ACPI GED support for the sleep event Annie Li
2023-12-05  0:29 ` [RFC PATCH 08/11] tests/acpi: allow FACP and DSDT table changes for arm/virt Annie Li
2023-12-05  0:29 ` [RFC PATCH 09/11] hw/arm: enable sleep support " Annie Li
2023-12-05  0:30 ` [RFC PATCH 10/11] tests/acpi: Update FACP and DSDT tables for sleep button Annie Li
2023-12-05  0:31 ` [RFC PATCH 11/11] arm/virt: enable sleep support Annie Li

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87r0k075ij.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=annie.li@oracle.com \
    --cc=imammedo@redhat.com \
    --cc=miguel.luis@oracle.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.