qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>, qemu-devel@nongnu.org
Cc: Laurent Vivier <lvivier@redhat.com>,
	Thomas Huth <thuth@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	David Hildenbrand <david@redhat.com>,
	Michael Roth <michael.roth@amd.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Richard Henderson <richard.henderson@linaro.org>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
	Peter Xu <peterx@redhat.com>,
	Yuval Shaia <yuval.shaia.ml@gmail.com>,
	Halil Pasic <pasic@linux.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	qemu-s390x@nongnu.org, Gerd Hoffmann <kraxel@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Eric Blake <eblake@redhat.com>,
	Markus Armbruster <armbru@redhat.com>
Subject: Re: [PATCH v4 17/22] qapi: introduce x-query-cmma QMP command
Date: Tue, 2 Nov 2021 15:53:29 +0100	[thread overview]
Message-ID: <b92cc519-6c48-895e-eacd-c7a012aee180@redhat.com> (raw)
In-Reply-To: <20211028155457.967291-18-berrange@redhat.com>

On 10/28/21 17:54, Daniel P. Berrangé wrote:
> This is a counterpart to the HMP "info cmma" command. It is being
> added with an "x-" prefix because this QMP command is intended as an
> adhoc debugging tool and will thus not be modelled in QAPI as fully
> structured data, nor will it have long term guaranteed stability.
> The existing HMP command is rewritten to call the QMP command.
> 
> This command is unable to use the pre-existing HumanReadableText,
> because if 'common.json' is included into 'machine-target.json'
> the static marshalling method for HumanReadableText will be reported
> as unused by the compiler on all architectures except s390x.
> 
> Possible options were
> 
>  1 Support 'if' conditionals on 'include' statements in QAPI
>  2 Add further commands to 'machine-target.json' that use
>    HumanReadableText, such that it has at least one usage
>    on all architecture targets.
>  3 Duplicate HumanReadableText as TargetHumanReadableText
>    adding conditions
> 
> This patch takes option (3) in the belief that we will eventually
> get to a point where option (2) happens, and TargetHumanReadableText
> can be removed again.

Aren't you using (1) here? TargetHumanReadableText was added in v2
but v3 diverged and doesn't add it anymore.

> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>  hw/s390x/s390-stattrib.c | 56 +++++++++++++++++++++++++++-------------
>  qapi/machine-target.json | 14 ++++++++++
>  2 files changed, 52 insertions(+), 18 deletions(-)
> 
> diff --git a/hw/s390x/s390-stattrib.c b/hw/s390x/s390-stattrib.c
> index 9eda1c3b2a..d8f5867a5f 100644
> --- a/hw/s390x/s390-stattrib.c
> +++ b/hw/s390x/s390-stattrib.c
> @@ -17,6 +17,8 @@
>  #include "qemu/error-report.h"
>  #include "exec/ram_addr.h"
>  #include "qapi/error.h"
> +#include "qapi/qapi-commands-machine-target.h"
> +#include "qapi/type-helpers.h"
>  #include "qapi/qmp/qdict.h"
>  
>  /* 512KiB cover 2GB of guest memory */
> @@ -67,41 +69,59 @@ void hmp_migrationmode(Monitor *mon, const QDict *qdict)
>      }
>  }
>  
> -void hmp_info_cmma(Monitor *mon, const QDict *qdict)
> +HumanReadableText *qmp_x_query_cmma(int64_t addr,
> +                                    bool has_count,
> +                                    int64_t count,
> +                                    Error **errp)
>  {
> +    g_autoptr(GString) buf = g_string_new("");
>      S390StAttribState *sas = s390_get_stattrib_device();
>      S390StAttribClass *sac = S390_STATTRIB_GET_CLASS(sas);
> -    uint64_t addr = qdict_get_int(qdict, "addr");
> -    uint64_t buflen = qdict_get_try_int(qdict, "count", 8);
> -    uint8_t *vals;
> +    g_autofree uint8_t *vals = NULL;
>      int cx, len;
>  
> -    vals = g_try_malloc(buflen);
> +    vals = g_try_malloc(count);
>      if (!vals) {
> -        monitor_printf(mon, "Error: %s\n", strerror(errno));
> -        return;
> +        error_setg_errno(errp, errno, "cannot allocate CMMA attribute values");
> +        return NULL;
>      }
>  
> -    len = sac->peek_stattr(sas, addr / TARGET_PAGE_SIZE, buflen, vals);
> +    len = sac->peek_stattr(sas, addr / TARGET_PAGE_SIZE, count, vals);
>      if (len < 0) {
> -        monitor_printf(mon, "Error: %s", strerror(-len));
> -        goto out;
> +        error_setg_errno(errp, -len, "cannot peek at CMMA attribute values");
> +        return NULL;
>      }
>  
> -    monitor_printf(mon, "  CMMA attributes, "
> -                   "pages %" PRIu64 "+%d (0x%" PRIx64 "):\n",
> -                   addr / TARGET_PAGE_SIZE, len, addr & ~TARGET_PAGE_MASK);
> +    g_string_append_printf(buf, "  CMMA attributes, "
> +                           "pages %" PRIu64 "+%d (0x%" PRIx64 "):\n",
> +                           addr / TARGET_PAGE_SIZE, len,
> +                           addr & ~TARGET_PAGE_MASK);
>      for (cx = 0; cx < len; cx++) {
>          if (cx % 8 == 7) {
> -            monitor_printf(mon, "%02x\n", vals[cx]);
> +            g_string_append_printf(buf, "%02x\n", vals[cx]);
>          } else {
> -            monitor_printf(mon, "%02x", vals[cx]);
> +            g_string_append_printf(buf, "%02x", vals[cx]);
>          }
>      }
> -    monitor_printf(mon, "\n");
> +    g_string_append_printf(buf, "\n");
> +
> +    return human_readable_text_from_str(buf);
> +}
> +
> +void hmp_info_cmma(Monitor *mon, const QDict *qdict)
> +{
> +    Error *err = NULL;
> +    g_autoptr(HumanReadableText) info = NULL;
> +    uint64_t addr = qdict_get_int(qdict, "addr");
> +    uint64_t count = qdict_get_try_int(qdict, "count", 8);
> +
> +    info = qmp_x_query_cmma(addr, true, count, &err);
> +    if (err) {
> +        error_report_err(err);
> +        return;
> +    }
>  
> -out:
> -    g_free(vals);
> +    monitor_printf(mon, "%s", info->human_readable_text);
>  }
>  
>  /* Migration support: */
> diff --git a/qapi/machine-target.json b/qapi/machine-target.json
> index 7d4e73462f..19e44987af 100644
> --- a/qapi/machine-target.json
> +++ b/qapi/machine-target.json
> @@ -345,6 +345,20 @@
>                     'TARGET_MIPS' ] } }
>  
>  
> +##
> +# @x-query-cmma:
> +#
> +# Query the values of the CMMA storage attributes for a range of pages
> +#
> +# Returns: CMMA storage attribute values
> +#
> +# Since: 6.2
> +##
> +{ 'command': 'x-query-cmma',
> +  'data': { 'addr': 'int', '*count': 'int' },
> +  'returns': 'HumanReadableText',
> +  'if': 'TARGET_S390X' }
> +
>  ##
>  # @x-query-skeys:
>  #
> 



  parent reply	other threads:[~2021-11-02 14:57 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-28 15:54 [PATCH v4 00/22] monitor: explicitly permit QMP commands to be added for all use cases Daniel P. Berrangé
2021-10-28 15:54 ` [PATCH v4 01/22] monitor: remove 'info ioapic' HMP command Daniel P. Berrangé
2021-10-29  2:02   ` Peter Xu
2021-10-28 15:54 ` [PATCH v4 02/22] monitor: make hmp_handle_error return a boolean Daniel P. Berrangé
2021-10-28 16:04   ` Dr. David Alan Gilbert
2021-10-28 16:47   ` Philippe Mathieu-Daudé
2021-11-01 15:54     ` Daniel P. Berrangé
2021-10-28 15:54 ` [PATCH v4 03/22] docs/devel: rename file for writing monitor commands Daniel P. Berrangé
2021-10-28 17:09   ` Philippe Mathieu-Daudé
2021-10-28 15:54 ` [PATCH v4 04/22] docs/devel: tweak headings in monitor command docs Daniel P. Berrangé
2021-10-28 15:54 ` [PATCH v4 05/22] docs/devel: update error handling guidance for HMP commands Daniel P. Berrangé
2021-10-28 16:14   ` Dr. David Alan Gilbert
2021-10-28 15:54 ` [PATCH v4 06/22] monitor: introduce HumanReadableText and HMP support Daniel P. Berrangé
2021-10-28 16:54   ` Philippe Mathieu-Daudé
2021-11-02 15:11   ` Philippe Mathieu-Daudé
2021-10-28 15:54 ` [PATCH v4 07/22] docs/devel: document expectations for QAPI data modelling for QMP Daniel P. Berrangé
2021-11-04 20:32   ` Eric Blake
2021-10-28 15:54 ` [PATCH v4 08/22] docs/devel: add example of command returning unstructured text Daniel P. Berrangé
2021-10-28 15:54 ` [PATCH v4 09/22] docs/devel: document expectations for HMP commands in the future Daniel P. Berrangé
2021-10-28 15:54 ` [PATCH v4 10/22] qapi: introduce x-query-roms QMP command Daniel P. Berrangé
2021-10-28 16:55   ` Philippe Mathieu-Daudé
2021-10-28 15:54 ` [PATCH v4 11/22] qapi: introduce x-query-profile " Daniel P. Berrangé
2021-10-29 11:29   ` Philippe Mathieu-Daudé
2021-10-28 15:54 ` [PATCH v4 12/22] qapi: introduce x-query-numa " Daniel P. Berrangé
2021-10-29 11:28   ` Philippe Mathieu-Daudé
2021-10-28 15:54 ` [PATCH v4 13/22] qapi: introduce x-query-usb " Daniel P. Berrangé
2021-10-28 16:57   ` Philippe Mathieu-Daudé
2021-10-28 15:54 ` [PATCH v4 14/22] qapi: introduce x-query-rdma " Daniel P. Berrangé
2021-10-29 11:26   ` Philippe Mathieu-Daudé
2021-10-28 15:54 ` [PATCH v4 15/22] qapi: introduce x-query-ramblock " Daniel P. Berrangé
2021-10-28 16:58   ` Philippe Mathieu-Daudé
2021-10-28 15:54 ` [PATCH v4 16/22] qapi: introduce x-query-skeys " Daniel P. Berrangé
2021-11-02 15:02   ` Philippe Mathieu-Daudé
2021-11-02 16:05     ` Daniel P. Berrangé
2021-10-28 15:54 ` [PATCH v4 17/22] qapi: introduce x-query-cmma " Daniel P. Berrangé
2021-10-28 17:00   ` Philippe Mathieu-Daudé
2021-11-02 14:53   ` Philippe Mathieu-Daudé [this message]
2021-10-28 15:54 ` [PATCH v4 18/22] hmp: synchronize cpu state for lapic info Daniel P. Berrangé
2023-10-26 16:50   ` Woodhouse, David via
2023-10-26 16:50     ` Woodhouse, David
2021-10-28 15:54 ` [PATCH v4 19/22] qapi: introduce x-query-lapic QMP command Daniel P. Berrangé
2021-10-28 15:54 ` [PATCH v4 20/22] qapi: introduce x-query-irq " Daniel P. Berrangé
2021-11-02 14:57   ` Philippe Mathieu-Daudé
2021-11-02 16:02     ` Daniel P. Berrangé
2021-10-28 15:54 ` [PATCH v4 21/22] qapi: introduce x-query-jit " Daniel P. Berrangé
2021-10-28 17:05   ` Philippe Mathieu-Daudé
2021-10-28 15:54 ` [PATCH v4 22/22] qapi: introduce x-query-opcount " Daniel P. Berrangé
2021-10-28 17:08   ` Philippe Mathieu-Daudé
2021-11-01 15:58     ` Daniel P. Berrangé

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=b92cc519-6c48-895e-eacd-c7a012aee180@redhat.com \
    --to=philmd@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=eblake@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=michael.roth@amd.com \
    --cc=pasic@linux.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.com \
    --cc=yuval.shaia.ml@gmail.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).