From nobody Wed Nov 5 16:39:36 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1496652930913675.0990525675584; Mon, 5 Jun 2017 01:55:30 -0700 (PDT) Received: from localhost ([::1]:60326 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dHnnN-0000VQ-6l for importer@patchew.org; Mon, 05 Jun 2017 04:55:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51582) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dHnmb-00008z-7p for qemu-devel@nongnu.org; Mon, 05 Jun 2017 04:54:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dHnmW-0004Nd-DB for qemu-devel@nongnu.org; Mon, 05 Jun 2017 04:54:41 -0400 Received: from manul.sfritsch.de ([138.201.64.112]:54285) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dHnmW-0004MB-5t for qemu-devel@nongnu.org; Mon, 05 Jun 2017 04:54:36 -0400 From: Stefan Fritsch To: qemu-devel@nongnu.org Date: Mon, 5 Jun 2017 10:52:54 +0200 Message-Id: <20170605085254.16485-1-sf@sfritsch.de> X-Mailer: git-send-email 2.11.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 138.201.64.112 Subject: [Qemu-devel] [PATCH] Add chardev-send-break monitor command X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Markus Armbruster , "Dr. David Alan Gilbert" , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , Stefan Fritsch Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 Acked-by: Dr. David Alan Gilbert --- 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)); } =20 +void qmp_chardev_send_break(const char *id, Error **errp) +{ + Chardev *chr; + + chr =3D qemu_chr_find(id); + if (chr =3D=3D 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 =20 { + .name =3D "chardev-send-break", + .args_type =3D "id:s", + .params =3D "id", + .help =3D "send break on chardev", + .cmd =3D hmp_chardev_send_break, + .command_completion =3D chardev_remove_completion, + }, + +STEXI +@item chardev-send-break id +@findex chardev-send-break +Sends break on the chardev @var{id}. + +ETEXI + + { .name =3D "qemu-io", .args_type =3D "device:B,command:s", .params =3D "[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 *q= dict) hmp_handle_error(mon, &local_err); } =20 +void hmp_chardev_send_break(Monitor *mon, const QDict *qdict) +{ + Error *local_err =3D 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 *qdic= t); 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'} } =20 ## +# @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 --=20 2.11.0