All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Mahmoud Mandour <ma.mandourr@gmail.com>
Cc: cota@braap.org, qemu-devel@nongnu.org,
	Laurent Vivier <laurent@vivier.eu>
Subject: Re: [PATCH 01/13] plugins: allow plugin arguments to be passed directly
Date: Mon, 19 Jul 2021 14:31:35 +0100	[thread overview]
Message-ID: <87lf62pgzm.fsf@linaro.org> (raw)
In-Reply-To: <20210717100920.240793-2-ma.mandourr@gmail.com>


Mahmoud Mandour <ma.mandourr@gmail.com> writes:

> Passing arguments to plugins had to be done through "arg=<argname>".
> This is redundant and introduces confusion especially when the argument
> has a name and value (e.g. `-plugin plugin_name,arg="argname=argvalue"`).
>
> This allows passing plugin arguments directly e.g:
>
>     `-plugin plugin_name,argname=argvalue`
>
> For now, passing arguments through "arg=" is still supports but outputs
> a deprecation warning.
>
> Also, this commit makes boolean arguments passed to plugins in the
> `argname=on|off` form instead of the deprecated short-boolean form.
>
> Signed-off-by: Mahmoud Mandour <ma.mandourr@gmail.com>

Tested-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>

> ---
>  linux-user/main.c |  2 +-
>  plugins/loader.c  | 24 ++++++++++++++++++++----
>  qemu-options.hx   |  9 ++++-----
>  3 files changed, 25 insertions(+), 10 deletions(-)
>
> diff --git a/linux-user/main.c b/linux-user/main.c
> index 4dfc47ad3b..d47f78132c 100644
> --- a/linux-user/main.c
> +++ b/linux-user/main.c
> @@ -462,7 +462,7 @@ static const struct qemu_argument arg_table[] = {
>       "",           "[[enable=]<pattern>][,events=<file>][,file=<file>]"},
>  #ifdef CONFIG_PLUGIN
>      {"plugin",     "QEMU_PLUGIN",      true,  handle_arg_plugin,
> -     "",           "[file=]<file>[,arg=<string>]"},
> +     "",           "[file=]<file>[,<argname>=<argvalue>]"},
>  #endif
>      {"version",    "QEMU_VERSION",     false, handle_arg_version,
>       "",           "display version information and exit"},
> diff --git a/plugins/loader.c b/plugins/loader.c
> index 05df40398d..a4ec281692 100644
> --- a/plugins/loader.c
> +++ b/plugins/loader.c
> @@ -94,6 +94,8 @@ static int plugin_add(void *opaque, const char *name, const char *value,
>  {
>      struct qemu_plugin_parse_arg *arg = opaque;
>      struct qemu_plugin_desc *p;
> +    bool is_on;
> +    char *fullarg;
>  
>      if (strcmp(name, "file") == 0) {
>          if (strcmp(value, "") == 0) {
> @@ -107,18 +109,32 @@ static int plugin_add(void *opaque, const char *name, const char *value,
>              QTAILQ_INSERT_TAIL(arg->head, p, entry);
>          }
>          arg->curr = p;
> -    } else if (strcmp(name, "arg") == 0) {
> +    } else {
>          if (arg->curr == NULL) {
>              error_setg(errp, "missing earlier '-plugin file=' option");
>              return 1;
>          }
> +
> +        if (g_strcmp0(name, "arg") == 0 &&
> +                !qapi_bool_parse(name, value, &is_on, NULL)) {
> +            if (strchr(value, '=') == NULL) {
> +                /* Will treat arg="argname" as "argname=on" */
> +                fullarg = g_strdup_printf("%s=%s", value, "on");
> +            } else {
> +                fullarg = g_strdup_printf("%s", value);
> +            }
> +            warn_report("using 'arg=%s' is deprecated", value);
> +            error_printf("Please use '%s' directly\n", fullarg);
> +        } else {
> +            fullarg = g_strdup_printf("%s=%s", name, value);
> +        }
> +
>          p = arg->curr;
>          p->argc++;
>          p->argv = g_realloc_n(p->argv, p->argc, sizeof(char *));
> -        p->argv[p->argc - 1] = g_strdup(value);
> -    } else {
> -        error_setg(errp, "-plugin: unexpected parameter '%s'; ignored", name);
> +        p->argv[p->argc - 1] = fullarg;
>      }
> +
>      return 0;
>  }
>  
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 14258784b3..36b6cb9a2f 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -4459,19 +4459,18 @@ SRST
>  
>  ERST
>  DEF("plugin", HAS_ARG, QEMU_OPTION_plugin,
> -    "-plugin [file=]<file>[,arg=<string>]\n"
> +    "-plugin [file=]<file>[,<argname>=<argvalue>]\n"
>      "                load a plugin\n",
>      QEMU_ARCH_ALL)
>  SRST
> -``-plugin file=file[,arg=string]``
> +``-plugin file=file[,argname=argvalue]``
>      Load a plugin.
>  
>      ``file=file``
>          Load the given plugin from a shared library file.
>  
> -    ``arg=string``
> -        Argument string passed to the plugin. (Can be given multiple
> -        times.)
> +    ``argname=argvalue``
> +        Argument passed to the plugin. (Can be given multiple times.)
>  ERST
>  
>  HXCOMM Internal use


-- 
Alex Bennée


  reply	other threads:[~2021-07-19 13:32 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-17 10:09 [PATCH 00/13] new plugin argument passing scheme Mahmoud Mandour
2021-07-17 10:09 ` [PATCH 01/13] plugins: allow plugin arguments to be passed directly Mahmoud Mandour
2021-07-19 13:31   ` Alex Bennée [this message]
2021-07-17 10:09 ` [PATCH 02/13] plugins/api: added a boolean parsing plugin api Mahmoud Mandour
2021-07-19 14:11   ` Alex Bennée
2021-07-17 10:09 ` [PATCH 03/13] plugins/hotpages: introduce sortby arg and parsed bool args correctly Mahmoud Mandour
2021-07-19 14:23   ` Alex Bennée
2021-07-17 10:09 ` [PATCH 04/13] plugins/hotblocks: Added correct boolean argument parsing Mahmoud Mandour
2021-07-19 14:24   ` Alex Bennée
2021-07-19 14:26   ` Alex Bennée
2021-07-17 10:09 ` [PATCH 05/13] plugins/lockstep: make socket path not positional & parse bool arg Mahmoud Mandour
2021-07-19 14:25   ` Alex Bennée
2021-07-17 10:09 ` [PATCH 06/13] plugins/hwprofile: adapt to the new plugin arguments scheme Mahmoud Mandour
2021-07-17 10:09 ` [PATCH 07/13] plugins/howvec: Adapting to the new argument passing scheme Mahmoud Mandour
2021-07-19 14:57   ` Alex Bennée
2021-07-17 10:09 ` [PATCH 08/13] docs/tcg-plugins: new passing parameters scheme for cache docs Mahmoud Mandour
2021-07-19 14:58   ` Alex Bennée
2021-07-17 10:09 ` [PATCH 09/13] tests/plugins/bb: adapt to the new arg passing scheme Mahmoud Mandour
2021-07-19 14:58   ` Alex Bennée
2021-07-17 10:09 ` [PATCH 10/13] tests/plugins/insn: made arg inline not positional and parse it as bool Mahmoud Mandour
2021-07-19 14:59   ` Alex Bennée
2021-07-17 10:09 ` [PATCH 11/13] tests/plugins/mem: introduce "track" arg and make args not positional Mahmoud Mandour
2021-07-19 15:31   ` Alex Bennée
2021-07-17 10:09 ` [PATCH 12/13] tests/plugins/syscalls: adhere to new arg-passing scheme Mahmoud Mandour
2021-07-19 15:32   ` Alex Bennée
2021-07-17 10:09 ` [PATCH 13/13] docs/deprecated: deprecate passing plugin args through `arg=` Mahmoud Mandour
2021-07-19 12:13   ` Peter Krempa
2021-07-17 13:29 ` [PATCH 00/13] new plugin argument passing scheme Alex Bennée
2021-07-17 13:48   ` Mahmoud Mandour

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=87lf62pgzm.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=cota@braap.org \
    --cc=laurent@vivier.eu \
    --cc=ma.mandourr@gmail.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.