From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Stefan Fritsch <sf@sfritsch.de>
Cc: qemu-devel@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Eric Blake" <eblake@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] Add chardev-send-break monitor command
Date: Thu, 8 Jun 2017 10:31:13 +0100 [thread overview]
Message-ID: <20170608093113.GB2082@work-vm> (raw)
In-Reply-To: <20170605085254.16485-1-sf@sfritsch.de>
* Stefan Fritsch (sf@sfritsch.de) wrote:
> Sending a break on a serial console can be useful for debugging the
> guest. But not all chardev backends support sending breaks (only telnet
> and mux do). The chardev-send-break command allows to send a break even
> if using other backends.
>
> Signed-off-by: Stefan Fritsch <sf@sfritsch.de>
From the HMP side, it looks OK, you could easily add a line to
tests/test-hmp.c's command list.
But,
Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Dave
> ---
> chardev/char.c | 12 ++++++++++++
> hmp-commands.hx | 16 ++++++++++++++++
> hmp.c | 8 ++++++++
> hmp.h | 1 +
> qapi-schema.json | 20 ++++++++++++++++++++
> 5 files changed, 57 insertions(+)
>
> diff --git a/chardev/char.c b/chardev/char.c
> index 4e24dc39af..fa54f7c915 100644
> --- a/chardev/char.c
> +++ b/chardev/char.c
> @@ -1307,6 +1307,18 @@ void qmp_chardev_remove(const char *id, Error **errp)
> object_unparent(OBJECT(chr));
> }
>
> +void qmp_chardev_send_break(const char *id, Error **errp)
> +{
> + Chardev *chr;
> +
> + chr = qemu_chr_find(id);
> + if (chr == NULL) {
> + error_setg(errp, "Chardev '%s' not found", id);
> + return;
> + }
> + qemu_chr_be_event(chr, CHR_EVENT_BREAK);
> +}
> +
> void qemu_chr_cleanup(void)
> {
> object_unparent(get_chardevs_root());
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index e763606fe5..fc8d54b52a 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -1745,6 +1745,22 @@ Removes the chardev @var{id}.
> ETEXI
>
> {
> + .name = "chardev-send-break",
> + .args_type = "id:s",
> + .params = "id",
> + .help = "send break on chardev",
> + .cmd = hmp_chardev_send_break,
> + .command_completion = chardev_remove_completion,
> + },
> +
> +STEXI
> +@item chardev-send-break id
> +@findex chardev-send-break
> +Sends break on the chardev @var{id}.
> +
> +ETEXI
> +
> + {
> .name = "qemu-io",
> .args_type = "device:B,command:s",
> .params = "[device] \"[command]\"",
> diff --git a/hmp.c b/hmp.c
> index ad723903a6..fb2a38b7d6 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -2233,6 +2233,14 @@ void hmp_chardev_remove(Monitor *mon, const QDict *qdict)
> hmp_handle_error(mon, &local_err);
> }
>
> +void hmp_chardev_send_break(Monitor *mon, const QDict *qdict)
> +{
> + Error *local_err = NULL;
> +
> + qmp_chardev_send_break(qdict_get_str(qdict, "id"), &local_err);
> + hmp_handle_error(mon, &local_err);
> +}
> +
> void hmp_qemu_io(Monitor *mon, const QDict *qdict)
> {
> BlockBackend *blk;
> diff --git a/hmp.h b/hmp.h
> index d8b94ce9dc..214b2617e7 100644
> --- a/hmp.h
> +++ b/hmp.h
> @@ -103,6 +103,7 @@ 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_remove(Monitor *mon, const QDict *qdict);
> +void hmp_chardev_send_break(Monitor *mon, const QDict *qdict);
> void hmp_qemu_io(Monitor *mon, const QDict *qdict);
> void hmp_cpu_add(Monitor *mon, const QDict *qdict);
> void hmp_object_add(Monitor *mon, const QDict *qdict);
> diff --git a/qapi-schema.json b/qapi-schema.json
> index 4b50b652d3..e01dd83dd9 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -5114,6 +5114,26 @@
> { 'command': 'chardev-remove', 'data': {'id': 'str'} }
>
> ##
> +# @chardev-send-break:
> +#
> +# Send a break to a character device
> +#
> +# @id: the chardev's ID, must exist
> +#
> +# Returns: Nothing on success
> +#
> +# Since: 2.10
> +#
> +# Example:
> +#
> +# -> { "execute": "chardev-send-break", "arguments": { "id" : "foo" } }
> +# <- { "return": {} }
> +#
> +##
> +{ 'command': 'chardev-send-break', 'data': {'id': 'str'} }
> +
> +
> +##
> # @TpmModel:
> #
> # An enumeration of TPM models
> --
> 2.11.0
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
prev parent reply other threads:[~2017-06-08 9:31 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-05 8:52 [Qemu-devel] [PATCH] Add chardev-send-break monitor command Stefan Fritsch
2017-06-05 12:24 ` Eric Blake
2017-06-06 14:17 ` Paolo Bonzini
2017-06-06 16:19 ` Markus Armbruster
2017-06-06 19:47 ` Stefan Fritsch
2017-06-06 22:44 ` Paolo Bonzini
2017-06-07 7:06 ` Markus Armbruster
2017-06-07 7:10 ` Paolo Bonzini
2017-06-08 9:31 ` Dr. David Alan Gilbert [this message]
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=20170608093113.GB2082@work-vm \
--to=dgilbert@redhat.com \
--cc=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=sf@sfritsch.de \
/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).