mbox series

[00/21] qapi: Kill 'qapi/qmp/qerror.h' for good

Message ID 20231004173158.42591-1-philmd@linaro.org
Headers show
Series qapi: Kill 'qapi/qmp/qerror.h' for good | expand

Message

Philippe Mathieu-Daudé Oct. 4, 2023, 5:31 p.m. UTC
Hi,

This is kind of a selfish series. I'm really tired to grep
and read this comment from 2015 in qapi/qmp/qerror.h:
      /*
       * These macros will go away, please don't use
       * in new code, and do not add new ones!
       */

Besides, these definitions are still added in recent code
(see for example commit 09f9ec9913 from June 2023). So
let's finish with this 8 years old technical debt.

Overall it took me 3h: 1h to find the correct Coccinelle
doc about Python use and read it again [*], then 1h to
adapt the script for each patch, rest is testing and
writing comments, so the scripts used could be used as
reference later.

Regards,

Phil.

[*] https://www.lrz.de/services/compute/courses/x_lecturenotes/hspc1w19.pdf

Philippe Mathieu-Daudé (21):
  qapi: Inline and remove QERR_BUS_NO_HOTPLUG definition
  qapi: Inline and remove QERR_DEVICE_HAS_NO_MEDIUM definition
  qapi: Inline and remove QERR_DEVICE_IN_USE definition
  qapi: Inline and remove QERR_DEVICE_NO_HOTPLUG definition
  qapi: Inline QERR_INVALID_PARAMETER definition (constant parameter)
  qapi: Inline and remove QERR_INVALID_PARAMETER definition
  qapi: Inline QERR_INVALID_PARAMETER_TYPE definition (constant param)
  qapi: Inline QERR_INVALID_PARAMETER_TYPE definition (constant value)
  qapi: Inline and remove QERR_INVALID_PARAMETER_TYPE definition
  qapi: Inline QERR_INVALID_PARAMETER_VALUE definition (constant value)
  qapi: Inline QERR_INVALID_PARAMETER_VALUE definition (constant param)
  qapi: Inline and remove QERR_INVALID_PARAMETER_VALUE definition
  qapi: Inline and remove QERR_IO_ERROR definition
  qapi: Inline and remove QERR_MIGRATION_ACTIVE definition
  qapi: Inline QERR_MISSING_PARAMETER definition (constant parameter)
  qapi: Inline and remove QERR_MISSING_PARAMETER definition
  qapi: Inline and remove QERR_PROPERTY_VALUE_BAD definition
  qapi: Inline and remove QERR_PROPERTY_VALUE_OUT_OF_RANGE definition
  qapi: Inline and remove QERR_QGA_COMMAND_FAILED  definition
  RFC qapi: Inline and remove QERR_UNSUPPORTED definition
  qapi: Remove 'qapi/qmp/qerror.h' header

 qga/qapi-schema.json             |  5 +-
 include/qapi/qmp/qerror.h        | 62 --------------------
 backends/cryptodev-vhost-user.c  |  5 +-
 backends/dbus-vmstate.c          |  3 +-
 backends/rng-egd.c               |  5 +-
 backends/rng-random.c            |  4 +-
 block/gluster.c                  | 22 +++----
 block/monitor/block-hmp-cmds.c   |  7 +--
 block/quorum.c                   |  4 +-
 block/snapshot.c                 |  5 +-
 block/vmdk.c                     |  9 ++-
 blockdev.c                       | 16 +++---
 blockjob.c                       |  4 +-
 chardev/char-fe.c                |  3 +-
 chardev/char.c                   |  4 +-
 dump/dump.c                      | 11 ++--
 dump/win_dump.c                  |  5 +-
 hw/core/qdev-properties-system.c |  6 +-
 hw/core/qdev-properties.c        |  3 +-
 hw/core/qdev.c                   |  4 +-
 hw/intc/openpic.c                |  4 +-
 hw/ppc/spapr_pci.c               |  5 +-
 hw/usb/redirect.c                |  7 +--
 migration/migration.c            |  7 +--
 migration/options.c              | 99 +++++++++++++-------------------
 migration/page_cache.c           |  9 ++-
 migration/ram.c                  |  5 +-
 migration/savevm.c               |  7 +--
 monitor/fds.c                    |  9 ++-
 monitor/hmp-cmds.c               |  3 +-
 monitor/qmp-cmds.c               |  4 +-
 net/filter-buffer.c              |  4 +-
 net/filter.c                     |  8 +--
 net/net.c                        | 10 ++--
 qapi/opts-visitor.c              | 12 ++--
 qapi/qapi-forward-visitor.c      |  3 +-
 qapi/qapi-util.c                 |  4 +-
 qapi/qapi-visit-core.c           |  5 +-
 qapi/qobject-input-visitor.c     | 53 ++++++++---------
 qapi/string-input-visitor.c      | 27 ++++-----
 qga/commands-bsd.c               |  9 ++-
 qga/commands-posix.c             | 47 ++++++++-------
 qga/commands-win32.c             | 65 ++++++++++-----------
 qga/commands.c                   | 10 ++--
 qom/object.c                     | 16 ++++--
 qom/object_interfaces.c          |  3 +-
 qom/qom-qmp-cmds.c               |  8 +--
 softmmu/balloon.c                |  3 +-
 softmmu/cpus.c                   |  8 +--
 softmmu/qdev-monitor.c           | 24 ++++----
 softmmu/rtc.c                    |  1 -
 softmmu/tpm.c                    |  8 +--
 softmmu/vl.c                     |  5 +-
 target/arm/arm-qmp-cmds.c        |  4 +-
 target/i386/cpu.c                | 15 +++--
 target/s390x/cpu_models_sysemu.c |  4 +-
 ui/input-barrier.c               |  3 +-
 ui/ui-qmp-cmds.c                 |  7 +--
 util/block-helpers.c             |  4 +-
 util/qemu-option.c               | 21 ++++---
 scripts/qapi/visit.py            |  5 +-
 61 files changed, 305 insertions(+), 437 deletions(-)
 delete mode 100644 include/qapi/qmp/qerror.h

Comments

Thomas Huth Oct. 4, 2023, 5:37 p.m. UTC | #1
On 04/10/2023 19.31, Philippe Mathieu-Daudé wrote:
> 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;
>      constant value;
>      @@
>           error_setg(errp, QERR_INVALID_PARAMETER_TYPE, param, value);
> 
>      @script:python strformat depends on match@
>      param << match.param;
>      value << match.value;
>      fixedfmt; // new var
>      @@
>      fixedfmt = f'"Invalid parameter type for \'{param[1:-1]}\', expected: {value[1:-1]}"'
>      coccinelle.fixedfmt = cocci.make_ident(fixedfmt)
> 
>      @replace@
>      expression match.errp;
>      constant match.param;
>      constant match.value;
>      identifier strformat.fixedfmt;
>      @@
>      -    error_setg(errp, QERR_INVALID_PARAMETER_TYPE, param, value);
>      +    error_setg(errp, fixedfmt);
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   target/arm/arm-qmp-cmds.c        | 3 ++-
>   target/s390x/cpu_models_sysemu.c | 3 ++-
>   2 files changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/target/arm/arm-qmp-cmds.c b/target/arm/arm-qmp-cmds.c
> index b53d5efe13..3c99fd8222 100644
> --- a/target/arm/arm-qmp-cmds.c
> +++ b/target/arm/arm-qmp-cmds.c
> @@ -154,7 +154,8 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
>       if (model->props) {
>           qdict_in = qobject_to(QDict, model->props);
>           if (!qdict_in) {
> -            error_setg(errp, QERR_INVALID_PARAMETER_TYPE, "props", "dict");
> +            error_setg(errp,
> +                       "Invalid parameter type for 'props', expected: dict");
>               return NULL;
>           }
>       }
> diff --git a/target/s390x/cpu_models_sysemu.c b/target/s390x/cpu_models_sysemu.c
> index 63981bf36b..4507714493 100644
> --- a/target/s390x/cpu_models_sysemu.c
> +++ b/target/s390x/cpu_models_sysemu.c
> @@ -111,7 +111,8 @@ static void cpu_model_from_info(S390CPUModel *model, const CpuModelInfo *info,
>       if (info->props) {
>           qdict = qobject_to(QDict, info->props);
>           if (!qdict) {
> -            error_setg(errp, QERR_INVALID_PARAMETER_TYPE, "props", "dict");
> +            error_setg(errp,
> +                       "Invalid parameter type for 'props', expected: dict");
>               return;
>           }
>       }

Acked-by: Thomas Huth <thuth@redhat.com>