qemu-devel.nongnu.org archive mirror
 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,
	"Stefan Berger" <stefanb@linux.ibm.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Kevin Wolf" <kwolf@redhat.com>,
	"Hanna Reitz" <hreitz@redhat.com>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Stefan Berger" <stefanb@linux.vnet.ibm.com>,
	integration@gluster.org
Subject: Re: [PATCH v2 16/22] qapi: Inline QERR_MISSING_PARAMETER definition (constant parameter)
Date: Fri, 20 Oct 2023 14:58:18 +0200	[thread overview]
Message-ID: <87fs251mdx.fsf@pond.sub.org> (raw)
In-Reply-To: <20231005045041.52649-17-philmd@linaro.org> ("Philippe Mathieu-Daudé"'s message of "Thu, 5 Oct 2023 06:50:33 +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 patches:
>
>     @match@
>     expression errp;
>     constant param;
>     @@
>          error_setg(errp, QERR_MISSING_PARAMETER, param);
>
>     @script:python strformat depends on match@
>     param << match.param;
>     fixedfmt; // new var
>     @@
>     if param[0] == '"': # Format skipping '"',
>         fixedfmt = f'"Parameter \'{param[1:-1]}\' is missing"'
>     else: # or use definition.
>         fixedfmt = f'"Parameter " {param} " is missing"'
>     coccinelle.fixedfmt = cocci.make_ident(fixedfmt)
>
>     @replace@
>     expression match.errp;
>     constant match.param;
>     identifier strformat.fixedfmt;
>     @@
>     -    error_setg(errp, QERR_MISSING_PARAMETER, param);
>     +    error_setg(errp, fixedfmt);
>
> and:
>
>     @match@
>     constant param;
>     @@
>          error_report(QERR_MISSING_PARAMETER, param);
>
>     @script:python strformat depends on match@
>     param << match.param;
>     fixedfmt; // new var
>     @@
>     fixedfmt = f'"Parameter \'{param[1:-1]}\' is missing"'
>     coccinelle.fixedfmt = cocci.make_ident(fixedfmt)
>
>     @replace@
>     constant match.param;
>     identifier strformat.fixedfmt;
>     @@
>     -    error_report(QERR_MISSING_PARAMETER, param);
>     +    error_report(fixedfmt);
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> ---
>  backends/dbus-vmstate.c        |  2 +-
>  block/gluster.c                | 21 +++++++++++----------
>  block/monitor/block-hmp-cmds.c |  6 +++---
>  dump/dump.c                    |  4 ++--
>  hw/usb/redirect.c              |  2 +-
>  softmmu/qdev-monitor.c         |  2 +-
>  softmmu/tpm.c                  |  4 ++--
>  softmmu/vl.c                   |  4 ++--
>  ui/input-barrier.c             |  2 +-
>  ui/ui-qmp-cmds.c               |  2 +-
>  10 files changed, 25 insertions(+), 24 deletions(-)
>
> diff --git a/backends/dbus-vmstate.c b/backends/dbus-vmstate.c
> index 57369ec0f2..e781ded17c 100644
> --- a/backends/dbus-vmstate.c
> +++ b/backends/dbus-vmstate.c
> @@ -413,7 +413,7 @@ dbus_vmstate_complete(UserCreatable *uc, Error **errp)
>      }
>  
>      if (!self->dbus_addr) {
> -        error_setg(errp, QERR_MISSING_PARAMETER, "addr");

Misuse of QERR_MISSING_PARAMETER.

This function is interface UserCreatableClass method complete(), which
runs right after an object with this interface was created.
"Parameters" need not exist in this context.

The actual issue is property "addr" has not been set.  So let's report
that: "property 'addr' is required".

Separate patch, to keep this one mechanical.

> +        error_setg(errp, "Parameter 'addr' is missing");
>          return;
>      }
>  
> diff --git a/block/gluster.c b/block/gluster.c
> index ad5fadbe79..8d97d698c3 100644
> --- a/block/gluster.c
> +++ b/block/gluster.c
> @@ -530,20 +530,20 @@ static int qemu_gluster_parse_json(BlockdevOptionsGluster *gconf,
>  
>      num_servers = qdict_array_entries(options, GLUSTER_OPT_SERVER_PATTERN);
>      if (num_servers < 1) {
> -        error_setg(&local_err, QERR_MISSING_PARAMETER, "server");
> +        error_setg(&local_err, "Parameter 'server' is missing");
>          goto out;
>      }
>  
>      ptr = qemu_opt_get(opts, GLUSTER_OPT_VOLUME);
>      if (!ptr) {
> -        error_setg(&local_err, QERR_MISSING_PARAMETER, GLUSTER_OPT_VOLUME);
> +        error_setg(&local_err, "Parameter " GLUSTER_OPT_VOLUME " is missing");
>          goto out;
>      }
>      gconf->volume = g_strdup(ptr);
>  
>      ptr = qemu_opt_get(opts, GLUSTER_OPT_PATH);
>      if (!ptr) {
> -        error_setg(&local_err, QERR_MISSING_PARAMETER, GLUSTER_OPT_PATH);
> +        error_setg(&local_err, "Parameter " GLUSTER_OPT_PATH " is missing");
>          goto out;
>      }
>      gconf->path = g_strdup(ptr);
> @@ -562,7 +562,8 @@ static int qemu_gluster_parse_json(BlockdevOptionsGluster *gconf,
>  
>          ptr = qemu_opt_get(opts, GLUSTER_OPT_TYPE);
>          if (!ptr) {
> -            error_setg(&local_err, QERR_MISSING_PARAMETER, GLUSTER_OPT_TYPE);
> +            error_setg(&local_err,
> +                       "Parameter " GLUSTER_OPT_TYPE " is missing");
>              error_append_hint(&local_err, GERR_INDEX_HINT, i);
>              goto out;
>  
> @@ -592,16 +593,16 @@ static int qemu_gluster_parse_json(BlockdevOptionsGluster *gconf,
>  
>              ptr = qemu_opt_get(opts, GLUSTER_OPT_HOST);
>              if (!ptr) {
> -                error_setg(&local_err, QERR_MISSING_PARAMETER,
> -                           GLUSTER_OPT_HOST);
> +                error_setg(&local_err,
> +                           "Parameter " GLUSTER_OPT_HOST " is missing");
>                  error_append_hint(&local_err, GERR_INDEX_HINT, i);
>                  goto out;
>              }
>              gsconf->u.inet.host = g_strdup(ptr);
>              ptr = qemu_opt_get(opts, GLUSTER_OPT_PORT);
>              if (!ptr) {
> -                error_setg(&local_err, QERR_MISSING_PARAMETER,
> -                           GLUSTER_OPT_PORT);
> +                error_setg(&local_err,
> +                           "Parameter " GLUSTER_OPT_PORT " is missing");
>                  error_append_hint(&local_err, GERR_INDEX_HINT, i);
>                  goto out;
>              }
> @@ -648,8 +649,8 @@ static int qemu_gluster_parse_json(BlockdevOptionsGluster *gconf,
>                  goto out;
>              }
>              if (!ptr) {
> -                error_setg(&local_err, QERR_MISSING_PARAMETER,
> -                           GLUSTER_OPT_PATH);
> +                error_setg(&local_err,
> +                           "Parameter " GLUSTER_OPT_PATH " is missing");
>                  error_append_hint(&local_err, GERR_INDEX_HINT, i);
>                  goto out;
>              }

I suspect pretty much everything you patch in this file is bad, but I'm
running out of steam.

> diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c
> index ca2599de44..90e593ed38 100644
> --- a/block/monitor/block-hmp-cmds.c
> +++ b/block/monitor/block-hmp-cmds.c
> @@ -252,7 +252,7 @@ void hmp_drive_mirror(Monitor *mon, const QDict *qdict)
>      };
>  
>      if (!filename) {
> -        error_setg(&err, QERR_MISSING_PARAMETER, "target");
> +        error_setg(&err, "Parameter 'target' is missing");
>          goto end;
>      }
>      qmp_drive_mirror(&mirror, &err);
> @@ -281,7 +281,7 @@ void hmp_drive_backup(Monitor *mon, const QDict *qdict)
>      };
>  
>      if (!filename) {
> -        error_setg(&err, QERR_MISSING_PARAMETER, "target");
> +        error_setg(&err, "Parameter 'target' is missing");
>          goto end;
>      }
>  
> @@ -356,7 +356,7 @@ void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict)
>           * In the future, if 'snapshot-file' is not specified, the snapshot
>           * will be taken internally. Today it's actually required.
>           */
> -        error_setg(&err, QERR_MISSING_PARAMETER, "snapshot-file");
> +        error_setg(&err, "Parameter 'snapshot-file' is missing");
>          goto end;
>      }
>  
> diff --git a/dump/dump.c b/dump/dump.c
> index e173f1f14c..642b952985 100644
> --- a/dump/dump.c
> +++ b/dump/dump.c
> @@ -2096,11 +2096,11 @@ void qmp_dump_guest_memory(bool paging, const char *file,
>          return;
>      }
>      if (has_begin && !has_length) {
> -        error_setg(errp, QERR_MISSING_PARAMETER, "length");
> +        error_setg(errp, "Parameter 'length' is missing");
>          return;
>      }
>      if (!has_begin && has_length) {
> -        error_setg(errp, QERR_MISSING_PARAMETER, "begin");
> +        error_setg(errp, "Parameter 'begin' is missing");
>          return;
>      }
>      if (has_detach) {
> diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
> index ac6fa34ad1..83bfc9dc19 100644
> --- a/hw/usb/redirect.c
> +++ b/hw/usb/redirect.c
> @@ -1426,7 +1426,7 @@ static void usbredir_realize(USBDevice *udev, Error **errp)
>      int i;
>  
>      if (!qemu_chr_fe_backend_connected(&dev->cs)) {
> -        error_setg(errp, QERR_MISSING_PARAMETER, "chardev");

Misuse of QERR_MISSING_PARAMETER.

This is a realize() method.  "Parameters" need not exist in this
context.

The actual issue is property "chardev" has not been set.  So let's
report that: "property 'filename' is required".

Separate patch, to keep this one mechanical.  Not mentioning this again
from now on.

> +        error_setg(errp, "Parameter 'chardev' is missing");
>          return;
>      }
>  
> diff --git a/softmmu/qdev-monitor.c b/softmmu/qdev-monitor.c
> index b17aec4357..b7b2bf18d4 100644
> --- a/softmmu/qdev-monitor.c
> +++ b/softmmu/qdev-monitor.c
> @@ -622,7 +622,7 @@ DeviceState *qdev_device_add_from_qdict(const QDict *opts,
>  
>      driver = qdict_get_try_str(opts, "driver");
>      if (!driver) {
> -        error_setg(errp, QERR_MISSING_PARAMETER, "driver");
> +        error_setg(errp, "Parameter 'driver' is missing");
>          return NULL;
>      }
>  
> diff --git a/softmmu/tpm.c b/softmmu/tpm.c
> index 8437c4efc3..3a7d4b5c67 100644
> --- a/softmmu/tpm.c
> +++ b/softmmu/tpm.c
> @@ -106,13 +106,13 @@ static int tpm_init_tpmdev(void *dummy, QemuOpts *opts, Error **errp)
>  
>      id = qemu_opts_id(opts);
>      if (id == NULL) {
> -        error_report(QERR_MISSING_PARAMETER, "id");
> +        error_report("Parameter 'id' is missing");
>          return 1;
>      }
>  
>      value = qemu_opt_get(opts, "type");
>      if (!value) {
> -        error_report(QERR_MISSING_PARAMETER, "type");
> +        error_report("Parameter 'type' is missing");
>          tpm_display_backend_drivers();
>          return 1;
>      }
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index 98e071e63b..840ac84069 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -1801,7 +1801,7 @@ static void object_option_parse(const char *optarg)
>  
>          type = qemu_opt_get(opts, "qom-type");
>          if (!type) {
> -            error_setg(&error_fatal, QERR_MISSING_PARAMETER, "qom-type");
> +            error_setg(&error_fatal, "Parameter 'qom-type' is missing");
>          }
>          if (user_creatable_print_help(type, opts)) {
>              exit(0);
> @@ -2266,7 +2266,7 @@ static int do_configure_accelerator(void *opaque, QemuOpts *opts, Error **errp)
>      bool qtest_with_kvm;
>  
>      if (!acc) {
> -        error_setg(errp, QERR_MISSING_PARAMETER, "accel");
> +        error_setg(errp, "Parameter 'accel' is missing");
>          goto bad;
>      }
>  
> diff --git a/ui/input-barrier.c b/ui/input-barrier.c
> index 2d57ca7079..ecbba4adc2 100644
> --- a/ui/input-barrier.c
> +++ b/ui/input-barrier.c
> @@ -493,7 +493,7 @@ static void input_barrier_complete(UserCreatable *uc, Error **errp)
>      Error *local_err = NULL;
>  
>      if (!ib->name) {
> -        error_setg(errp, QERR_MISSING_PARAMETER, "name");

Misuse of QERR_MISSING_PARAMETER.

This function is interface UserCreatableClass method complete(), which
runs right after an object with this interface was created.
"Parameters" need not exist in this context.

The actual issue is property "name" has not been set.  So let's report
that: "property 'name' is required".

> +        error_setg(errp, "Parameter 'name' is missing");
>          return;
>      }
>  
> diff --git a/ui/ui-qmp-cmds.c b/ui/ui-qmp-cmds.c
> index a95fd35948..0e350fc333 100644
> --- a/ui/ui-qmp-cmds.c
> +++ b/ui/ui-qmp-cmds.c
> @@ -195,7 +195,7 @@ void qmp_client_migrate_info(const char *protocol, const char *hostname,
>          }
>  
>          if (!has_port && !has_tls_port) {
> -            error_setg(errp, QERR_MISSING_PARAMETER, "port/tls-port");

Bad error message.  The actual issue is both "port" and "tls-port" are
missing, but we need at least one.  So let's report that: "parameter
'port' or 'tls-port' is required".

> +            error_setg(errp, "Parameter 'port/tls-port' is missing");
>              return;
>          }



  reply	other threads:[~2023-10-20 13:00 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
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 [this message]
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=87fs251mdx.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=hreitz@redhat.com \
    --cc=integration@gluster.org \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.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 \
    --cc=stefanb@linux.ibm.com \
    --cc=stefanb@linux.vnet.ibm.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).