From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Anton Nefedov <anton.nefedov@virtuozzo.com>
Cc: qemu-devel@nongnu.org, den@virtuozzo.com, pbonzini@redhat.com,
marcandre.lureau@redhat.com
Subject: Re: [Qemu-devel] [PATCH v4 10/13] hmp: add hmp analogue for qmp-chardev-change
Date: Fri, 30 Jun 2017 11:48:49 +0100 [thread overview]
Message-ID: <20170630104848.GC2132@work-vm> (raw)
In-Reply-To: <1498495550-72357-11-git-send-email-anton.nefedov@virtuozzo.com>
* Anton Nefedov (anton.nefedov@virtuozzo.com) wrote:
> Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com>
> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> CC: Dr. David Alan Gilbert <dgilbert@redhat.com>
Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> include/chardev/char.h | 10 ++++++++++
> hmp.h | 1 +
> chardev/char.c | 2 +-
> hmp-commands.hx | 18 +++++++++++++++++-
> hmp.c | 34 ++++++++++++++++++++++++++++++++++
> tests/test-hmp.c | 1 +
> 6 files changed, 64 insertions(+), 2 deletions(-)
>
> diff --git a/include/chardev/char.h b/include/chardev/char.h
> index 22fd734..1604ea9 100644
> --- a/include/chardev/char.h
> +++ b/include/chardev/char.h
> @@ -81,6 +81,16 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts,
> void qemu_chr_parse_common(QemuOpts *opts, ChardevCommon *backend);
>
> /**
> + * @qemu_chr_parse_opts:
> + *
> + * Parse the options to the ChardevBackend struct.
> + *
> + * Returns: a new backend or NULL on error
> + */
> +ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts,
> + Error **errp);
> +
> +/**
> * @qemu_chr_new:
> *
> * Create a new character backend from a URI.
> diff --git a/hmp.h b/hmp.h
> index d8b94ce..23e035c 100644
> --- a/hmp.h
> +++ b/hmp.h
> @@ -102,6 +102,7 @@ void hmp_nbd_server_start(Monitor *mon, const QDict *qdict);
> void hmp_nbd_server_add(Monitor *mon, const QDict *qdict);
> void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict);
> void hmp_chardev_add(Monitor *mon, const QDict *qdict);
> +void hmp_chardev_change(Monitor *mon, const QDict *qdict);
> void hmp_chardev_remove(Monitor *mon, const QDict *qdict);
> void hmp_qemu_io(Monitor *mon, const QDict *qdict);
> void hmp_cpu_add(Monitor *mon, const QDict *qdict);
> diff --git a/chardev/char.c b/chardev/char.c
> index 6b2cb7b..8e8b881 100644
> --- a/chardev/char.c
> +++ b/chardev/char.c
> @@ -567,7 +567,7 @@ static const char *chardev_alias_translate(const char *name)
> return name;
> }
>
> -static ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, Error **errp)
> +ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, Error **errp)
> {
> Error *local_err = NULL;
> const ChardevClass *cc;
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index e763606..2cad758 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -1724,7 +1724,23 @@ ETEXI
> STEXI
> @item chardev-add args
> @findex chardev-add
> -chardev_add accepts the same parameters as the -chardev command line switch.
> +chardev-add accepts the same parameters as the -chardev command line switch.
> +
> +ETEXI
> +
> + {
> + .name = "chardev-change",
> + .args_type = "id:s,args:s",
> + .params = "id args",
> + .help = "change chardev",
> + .cmd = hmp_chardev_change,
> + },
> +
> +STEXI
> +@item chardev-change args
> +@findex chardev-change
> +chardev-change accepts existing chardev @var{id} and then the same arguments
> +as the -chardev command line switch (except for "id").
>
> ETEXI
>
> diff --git a/hmp.c b/hmp.c
> index 8c72c58..91e4317 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -2225,6 +2225,40 @@ void hmp_chardev_add(Monitor *mon, const QDict *qdict)
> hmp_handle_error(mon, &err);
> }
>
> +void hmp_chardev_change(Monitor *mon, const QDict *qdict)
> +{
> + const char *args = qdict_get_str(qdict, "args");
> + const char *id;
> + Error *err = NULL;
> + ChardevBackend *backend = NULL;
> + ChardevReturn *ret = NULL;
> + QemuOpts *opts = qemu_opts_parse_noisily(qemu_find_opts("chardev"), args,
> + true);
> + if (!opts) {
> + error_setg(&err, "Parsing chardev args failed");
> + goto end;
> + }
> +
> + id = qdict_get_str(qdict, "id");
> + if (qemu_opts_id(opts)) {
> + error_setg(&err, "Unexpected 'id' parameter");
> + goto end;
> + }
> +
> + backend = qemu_chr_parse_opts(opts, &err);
> + if (!backend) {
> + goto end;
> + }
> +
> + ret = qmp_chardev_change(id, backend, &err);
> +
> +end:
> + qapi_free_ChardevReturn(ret);
> + qapi_free_ChardevBackend(backend);
> + qemu_opts_del(opts);
> + hmp_handle_error(mon, &err);
> +}
> +
> void hmp_chardev_remove(Monitor *mon, const QDict *qdict)
> {
> Error *local_err = NULL;
> diff --git a/tests/test-hmp.c b/tests/test-hmp.c
> index 99e35ec..299df19 100644
> --- a/tests/test-hmp.c
> +++ b/tests/test-hmp.c
> @@ -22,6 +22,7 @@ static int verbose;
> static const char *hmp_cmds[] = {
> "boot_set ndc",
> "chardev-add null,id=testchardev1",
> + "chardev-change testchardev1 ringbuf",
> "chardev-remove testchardev1",
> "commit all",
> "cpu-add 1",
> --
> 2.7.4
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2017-06-30 10:49 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-26 16:45 [Qemu-devel] [PATCH v4 00/13] chardevice hotswap Anton Nefedov
2017-06-26 16:45 ` [Qemu-devel] [PATCH v4 01/13] char: move QemuOpts->ChardevBackend translation to a separate func Anton Nefedov
2017-06-26 16:45 ` [Qemu-devel] [PATCH v4 02/13] char: add backend hotswap handler Anton Nefedov
2017-06-26 16:45 ` [Qemu-devel] [PATCH v4 03/13] char: chardevice hotswap Anton Nefedov
2017-06-26 16:45 ` [Qemu-devel] [PATCH v4 04/13] char: forbid direct chardevice access for hotswap devices Anton Nefedov
2017-06-26 16:45 ` [Qemu-devel] [PATCH v4 05/13] char: avoid chardevice direct access Anton Nefedov
2017-06-26 16:45 ` [Qemu-devel] [PATCH v4 06/13] test-char: unref chardev-udp after test Anton Nefedov
2017-06-26 16:45 ` [Qemu-devel] [PATCH v4 07/13] test-char: split char_udp_test Anton Nefedov
2017-06-26 16:45 ` [Qemu-devel] [PATCH v4 08/13] test-char: split char_file_test Anton Nefedov
2017-06-26 16:45 ` [Qemu-devel] [PATCH v4 09/13] test-char: add hotswap test Anton Nefedov
2017-06-26 16:45 ` [Qemu-devel] [PATCH v4 10/13] hmp: add hmp analogue for qmp-chardev-change Anton Nefedov
2017-06-30 10:48 ` Dr. David Alan Gilbert [this message]
2017-06-26 16:45 ` [Qemu-devel] [PATCH v4 11/13] virtio-console: chardev hotswap support Anton Nefedov
2017-06-29 10:02 ` Marc-André Lureau
2017-07-03 11:50 ` Anton Nefedov
2017-07-04 6:25 ` Amit Shah
2017-06-26 16:45 ` [Qemu-devel] [PATCH v4 12/13] serial: move TIOCM update to a separate function Anton Nefedov
2017-06-26 16:45 ` [Qemu-devel] [PATCH v4 13/13] serial: chardev hotswap support Anton Nefedov
2017-07-03 11:52 ` Anton Nefedov
2017-06-29 10:04 ` [Qemu-devel] [PATCH v4 00/13] chardevice hotswap Marc-André Lureau
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=20170630104848.GC2132@work-vm \
--to=dgilbert@redhat.com \
--cc=anton.nefedov@virtuozzo.com \
--cc=den@virtuozzo.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.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.