All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: "Philippe Mathieu-Daudé" <philmd@linaro.org>
Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, qemu-ppc@nongnu.org,
	qemu-block@nongnu.org, qemu-s390x@nongnu.org,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Michael Roth" <michael.roth@amd.com>,
	"Konstantin Kostiuk" <kkostiuk@redhat.com>,
	"Gerd Hoffmann" <kraxel@redhat.com>
Subject: Re: [PATCH v2 05/22] qapi: Inline QERR_INVALID_PARAMETER definition (constant parameter)
Date: Fri, 20 Oct 2023 09:07:12 +0200	[thread overview]
Message-ID: <87y1fx93hb.fsf@pond.sub.org> (raw)
In-Reply-To: <20231005045041.52649-6-philmd@linaro.org> ("Philippe Mathieu-Daudé"'s message of "Thu, 5 Oct 2023 06:50:22 +0200")

Philippe Mathieu-Daudé <philmd@linaro.org> writes:

> Address the comment added in commit 4629ed1e98
> ("qerror: Finally unused, clean up"), from 2015:
>
>   /*
>    * These macros will go away, please don't use
>    * in new code, and do not add new ones!
>    */
>
> Mechanical transformation using the following
> coccinelle semantic patch:
>
>     @match@
>     expression errp;
>     constant param;
>     @@
>          error_setg(errp, QERR_INVALID_PARAMETER, param);
>
>     @script:python strformat depends on match@
>     param << match.param;
>     fixedfmt; // new var
>     @@
>     fixedfmt = f'"Invalid parameter \'{param[1:-1]}\'"' # Format skipping '"'.
>     coccinelle.fixedfmt = cocci.make_ident(fixedfmt)
>
>     @replace@
>     expression match.errp;
>     constant match.param;
>     identifier strformat.fixedfmt;
>     @@
>     -    error_setg(errp, QERR_INVALID_PARAMETER, param);
>     +    error_setg(errp, fixedfmt);
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>  dump/dump.c        | 6 +++---
>  qga/commands.c     | 2 +-
>  ui/ui-qmp-cmds.c   | 2 +-
>  util/qemu-option.c | 2 +-
>  4 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/dump/dump.c b/dump/dump.c
> index d4ef713cd0..e173f1f14c 100644
> --- a/dump/dump.c
> +++ b/dump/dump.c
> @@ -1810,7 +1810,7 @@ static void dump_init(DumpState *s, int fd, bool has_format,
>  
>      s->fd = fd;
>      if (has_filter && !length) {
> -        error_setg(errp, QERR_INVALID_PARAMETER, "length");

Incorrect use of QERR_INVALID_PARAMETER: the parameter is perfectly
valid, the problem is its invalid value.  Better:

           error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "a non-zero size");

> +        error_setg(errp, "Invalid parameter 'length'");

Applying PATCH 12's transformation then results in

           error_setg(errp, "Parameter '%s' expects a non-zero size",
                      "length");

which you may want to contract to

           error_setg(errp, "Parameter 'length' expects a non-zero size");

But not in this patch.  Either before or after.  I'd pick before.

>          goto cleanup;
>      }
>      s->filter_area_begin = begin;
> @@ -1841,7 +1841,7 @@ static void dump_init(DumpState *s, int fd, bool has_format,
>  
>      /* Is the filter filtering everything? */
>      if (validate_start_block(s) == -1) {
> -        error_setg(errp, QERR_INVALID_PARAMETER, "begin");
> +        error_setg(errp, "Invalid parameter 'begin'");
>          goto cleanup;
>      }
>  
> @@ -2145,7 +2145,7 @@ void qmp_dump_guest_memory(bool paging, const char *file,
   #if !defined(WIN32)
       if (strstart(file, "fd:", &p)) {
           fd = monitor_get_fd(monitor_cur(), p, errp);
           if (fd == -1) {
               return;
           }
       }
   #endif

       if  (strstart(file, "file:", &p)) {
           fd = qemu_open_old(p, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, S_IRUSR);
           if (fd < 0) {
               error_setg_file_open(errp, errno, p);
               return;
           }
>      }
>  
>      if (fd == -1) {
> -        error_setg(errp, QERR_INVALID_PARAMETER, "protocol");

This made me go "there is no parameter protocol", but then I
double-checked the schema, and realized there is.  It's just named @file
here.  We should rename it to match the schema.

Again, the use of QERR_INVALID_PARAMETER is wrong: @protocol is valid,
its value isn't.

More: we should use qemu_create() instead of qemu_open_old(), to not
throw away qemu_open_internal()'s error.


> +        error_setg(errp, "Invalid parameter 'protocol'");
>          return;
>      }
>  
> diff --git a/qga/commands.c b/qga/commands.c
> index 09c683e263..871210ab0b 100644
> --- a/qga/commands.c
> +++ b/qga/commands.c
> @@ -154,7 +154,7 @@ GuestExecStatus *qmp_guest_exec_status(int64_t pid, Error **errp)
>  
>      gei = guest_exec_info_find(pid);
>      if (gei == NULL) {
> -        error_setg(errp, QERR_INVALID_PARAMETER, "pid");

Again, the use of QERR_INVALID_PARAMETER is wrong: @pid is valid, its
value isn't.

> +        error_setg(errp, "Invalid parameter 'pid'");
>          return NULL;
>      }
>  
> diff --git a/ui/ui-qmp-cmds.c b/ui/ui-qmp-cmds.c
> index debc07d678..41ca0100e7 100644
> --- a/ui/ui-qmp-cmds.c
> +++ b/ui/ui-qmp-cmds.c
> @@ -44,7 +44,7 @@ void qmp_set_password(SetPasswordOptions *opts, Error **errp)
>          assert(opts->protocol == DISPLAY_PROTOCOL_VNC);
>          if (opts->connected != SET_PASSWORD_ACTION_KEEP) {
>              /* vnc supports "connected=keep" only */
> -            error_setg(errp, QERR_INVALID_PARAMETER, "connected");

Same misuse of QERR_INVALID_PARAMETER.

> +            error_setg(errp, "Invalid parameter 'connected'");
>              return;
>          }
>          /*
> diff --git a/util/qemu-option.c b/util/qemu-option.c
> index eedd08929b..fb391a7904 100644
> --- a/util/qemu-option.c
> +++ b/util/qemu-option.c
> @@ -612,7 +612,7 @@ QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id,
>  
>      if (list->merge_lists) {
>          if (id) {
> -            error_setg(errp, QERR_INVALID_PARAMETER, "id");

This one is correct.

> +            error_setg(errp, "Invalid parameter 'id'");
>              return NULL;
>          }
>          opts = qemu_opts_find(list, NULL);

Score: 1 out of 6 points :)

None of this is your patch's fault.


  reply	other threads:[~2023-10-20  7:07 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-05  4:50 [PATCH v2 00/22] qapi: Kill 'qapi/qmp/qerror.h' for good Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 01/22] qapi: Inline and remove QERR_BUS_NO_HOTPLUG definition Philippe Mathieu-Daudé
2023-10-05  5:55   ` Cédric Le Goater
2023-10-20  5:49   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 02/22] qapi: Inline and remove QERR_DEVICE_HAS_NO_MEDIUM definition Philippe Mathieu-Daudé
2023-10-20  6:00   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 03/22] qapi: Inline and remove QERR_DEVICE_IN_USE definition Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 04/22] qapi: Inline and remove QERR_DEVICE_NO_HOTPLUG definition Philippe Mathieu-Daudé
2023-10-20  6:03   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 05/22] qapi: Inline QERR_INVALID_PARAMETER definition (constant parameter) Philippe Mathieu-Daudé
2023-10-20  7:07   ` Markus Armbruster [this message]
2023-10-05  4:50 ` [PATCH v2 06/22] qapi: Inline and remove QERR_INVALID_PARAMETER definition Philippe Mathieu-Daudé
2023-10-20  7:16   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 07/22] qapi: Inline QERR_INVALID_PARAMETER_TYPE definition (constant param) Philippe Mathieu-Daudé
2023-10-20  7:18   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 08/22] qapi: Inline QERR_INVALID_PARAMETER_TYPE definition (constant value) Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 09/22] qapi: Inline and remove QERR_INVALID_PARAMETER_TYPE definition Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 10/22] qapi: Correct error message for 'vcpu_dirty_limit' parameter Philippe Mathieu-Daudé
2023-10-05  6:33   ` Juan Quintela
2023-10-20  8:33   ` Markus Armbruster
2023-10-20  9:55     ` Juan Quintela
2023-10-05  4:50 ` [PATCH v2 11/22] qapi: Inline QERR_INVALID_PARAMETER_VALUE definition (constant value) Philippe Mathieu-Daudé
2023-10-05  6:34   ` Juan Quintela
2023-10-20 11:32   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 12/22] qapi: Inline QERR_INVALID_PARAMETER_VALUE definition (constant param) Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 13/22] qapi: Inline and remove QERR_INVALID_PARAMETER_VALUE definition Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 14/22] qapi: Inline and remove QERR_IO_ERROR definition Philippe Mathieu-Daudé
2023-10-20 11:50   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 15/22] qapi: Inline and remove QERR_MIGRATION_ACTIVE definition Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 16/22] qapi: Inline QERR_MISSING_PARAMETER definition (constant parameter) Philippe Mathieu-Daudé
2023-10-20 12:58   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 17/22] qapi: Inline and remove QERR_MISSING_PARAMETER definition Philippe Mathieu-Daudé
2023-10-05  4:50 ` [PATCH v2 18/22] qapi: Inline and remove QERR_PROPERTY_VALUE_BAD definition Philippe Mathieu-Daudé
2023-10-20 13:00   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 19/22] qapi: Inline and remove QERR_PROPERTY_VALUE_OUT_OF_RANGE definition Philippe Mathieu-Daudé
2023-10-20 13:08   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 20/22] qapi: Inline and remove QERR_QGA_COMMAND_FAILED definition Philippe Mathieu-Daudé
2023-10-20 13:03   ` Markus Armbruster
2023-10-05  4:50 ` [RFC PATCH v2 21/22] qapi: Inline and remove QERR_UNSUPPORTED definition Philippe Mathieu-Daudé
2023-10-05 11:22   ` Markus Armbruster
2023-10-05 11:57     ` Markus Armbruster
2024-06-12 12:23     ` Philippe Mathieu-Daudé
2024-06-12 13:07       ` Markus Armbruster
2024-06-12 13:27         ` Konstantin Kostiuk
2024-06-12 13:45         ` Philippe Mathieu-Daudé
2023-10-05 11:57   ` Markus Armbruster
2023-10-05  4:50 ` [PATCH v2 22/22] qapi: Remove 'qapi/qmp/qerror.h' header Philippe Mathieu-Daudé
2023-10-05  9:26 ` [PATCH v2 00/22] qapi: Kill 'qapi/qmp/qerror.h' for good Markus Armbruster
2023-10-20 13:15 ` Markus Armbruster

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=87y1fx93hb.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=kkostiuk@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=michael.roth@amd.com \
    --cc=philmd@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=qemu-s390x@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.