From nobody Sat May 4 23:31:48 2024 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 1498753891443351.1142823044995; Thu, 29 Jun 2017 09:31:31 -0700 (PDT) Received: from localhost ([::1]:40341 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQcLo-0007xf-T6 for importer@patchew.org; Thu, 29 Jun 2017 12:31:28 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34013) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQcKf-00072w-O7 for qemu-devel@nongnu.org; Thu, 29 Jun 2017 12:30:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dQcKe-0000i7-NO for qemu-devel@nongnu.org; Thu, 29 Jun 2017 12:30:17 -0400 Received: from mx1.redhat.com ([209.132.183.28]:43624) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dQcKe-0000hV-I7 for qemu-devel@nongnu.org; Thu, 29 Jun 2017 12:30:16 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 966671393C0 for ; Thu, 29 Jun 2017 16:30:15 +0000 (UTC) Received: from dgilbert-t530.redhat.com (ovpn-116-88.ams2.redhat.com [10.36.116.88]) by smtp.corp.redhat.com (Postfix) with ESMTP id 14306900B9 for ; Thu, 29 Jun 2017 16:30:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 966671393C0 Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dgilbert@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 966671393C0 From: "Dr. David Alan Gilbert (git)" To: qemu-devel@nongnu.org Date: Thu, 29 Jun 2017 17:30:10 +0100 Message-Id: <20170629163011.13388-2-dgilbert@redhat.com> In-Reply-To: <20170629163011.13388-1-dgilbert@redhat.com> References: <20170629163011.13388-1-dgilbert@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Thu, 29 Jun 2017 16:30:15 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 1/2] monitor: Add -a (all) option to info registers 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: , 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" From: Suraj Jitindar Singh The info registers command in the qemu monitor is used to dump register values. Currently this command uses the monitor cpu (which can be set by the user) as the cpu for whose registers will be dumped. Sometimes it is useful to see the registers for all cpus and currently this requires setting the monitor cpu and the re-running the command for each cpu in the system. I would be nice if there was an easier way to do this. Add the "-a" option to the info registers command to dump the register values for all cpus. Signed-off-by: Suraj Jitindar Singh Message-Id: <20170608054116.17203-1-sjitindarsingh@gmail.com> Reviewed-by: Dr. David Alan Gilbert Signed-off-by: Dr. David Alan Gilbert --- hmp-commands-info.hx | 6 +++--- monitor.c | 21 ++++++++++++++++----- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx index ae169011b1..ba98e581ab 100644 --- a/hmp-commands-info.hx +++ b/hmp-commands-info.hx @@ -100,9 +100,9 @@ ETEXI =20 { .name =3D "registers", - .args_type =3D "", - .params =3D "", - .help =3D "show the cpu registers", + .args_type =3D "cpustate_all:-a", + .params =3D "[-a]", + .help =3D "show the cpu registers (-a: all - show register i= nfo for all cpus)", .cmd =3D hmp_info_registers, }, =20 diff --git a/monitor.c b/monitor.c index 3c369f4dd5..4031876411 100644 --- a/monitor.c +++ b/monitor.c @@ -1078,13 +1078,24 @@ int monitor_get_cpu_index(void) =20 static void hmp_info_registers(Monitor *mon, const QDict *qdict) { - CPUState *cs =3D mon_get_cpu(); + bool all_cpus =3D qdict_get_try_bool(qdict, "cpustate_all", false); + CPUState *cs; =20 - if (!cs) { - monitor_printf(mon, "No CPU available\n"); - return; + if (all_cpus) { + CPU_FOREACH(cs) { + monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index); + cpu_dump_state(cs, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU); + } + } else { + cs =3D mon_get_cpu(); + + if (!cs) { + monitor_printf(mon, "No CPU available\n"); + return; + } + + cpu_dump_state(cs, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU); } - cpu_dump_state(cs, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU); } =20 static void hmp_info_jit(Monitor *mon, const QDict *qdict) --=20 2.13.0 From nobody Sat May 4 23:31:48 2024 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 1498753997035510.727334044067; Thu, 29 Jun 2017 09:33:17 -0700 (PDT) Received: from localhost ([::1]:40347 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQcNU-0000cg-ID for importer@patchew.org; Thu, 29 Jun 2017 12:33:12 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34023) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQcKg-00073x-U2 for qemu-devel@nongnu.org; Thu, 29 Jun 2017 12:30:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dQcKf-0000j4-IT for qemu-devel@nongnu.org; Thu, 29 Jun 2017 12:30:18 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49486) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dQcKf-0000iE-AQ for qemu-devel@nongnu.org; Thu, 29 Jun 2017 12:30:17 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6ACE2E254B for ; Thu, 29 Jun 2017 16:30:16 +0000 (UTC) Received: from dgilbert-t530.redhat.com (ovpn-116-88.ams2.redhat.com [10.36.116.88]) by smtp.corp.redhat.com (Postfix) with ESMTP id DBDC691E77 for ; Thu, 29 Jun 2017 16:30:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 6ACE2E254B Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dgilbert@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 6ACE2E254B From: "Dr. David Alan Gilbert (git)" To: qemu-devel@nongnu.org Date: Thu, 29 Jun 2017 17:30:11 +0100 Message-Id: <20170629163011.13388-3-dgilbert@redhat.com> In-Reply-To: <20170629163011.13388-1-dgilbert@redhat.com> References: <20170629163011.13388-1-dgilbert@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Thu, 29 Jun 2017 16:30:16 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 2/2] 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" From: Stefan Fritsch 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 Message-Id: <20170611074817.13621-1-sf@sfritsch.de> Reviewed-by: Eric Blake Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Dr. David Alan Gilbert Use 'send a break' in all 3 pieces of text as suggested by eblake --- chardev/char.c | 12 ++++++++++++ hmp-commands.hx | 16 ++++++++++++++++ hmp.c | 8 ++++++++ hmp.h | 1 + qapi-schema.json | 20 ++++++++++++++++++++ tests/test-char.c | 12 ++++++++++-- tests/test-hmp.c | 1 + 7 files changed, 68 insertions(+), 2 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index bcfc065d16..2b679a2295 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -951,6 +951,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..275ccdfbc7 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 a 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 +Send a 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 4c41cac625..dee40284c1 100644 --- a/hmp.c +++ b/hmp.c @@ -2236,6 +2236,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 9e34cf71f3..37c4b95aad 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -5117,6 +5117,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 diff --git a/tests/test-char.c b/tests/test-char.c index 9e361c8d09..87c724c5c2 100644 --- a/tests/test-char.c +++ b/tests/test-char.c @@ -53,7 +53,9 @@ static void fe_event(void *opaque, int event) FeHandler *h =3D opaque; =20 h->last_event =3D event; - quit =3D true; + if (event !=3D CHR_EVENT_BREAK) { + quit =3D true; + } } =20 #ifdef CONFIG_HAS_GLIB_SUBPROCESS_TESTS @@ -517,7 +519,7 @@ static void char_file_test(void) =20 file.in =3D fifo; file.has_in =3D true; - chr =3D qemu_chardev_new(NULL, TYPE_CHARDEV_FILE, &backend, + chr =3D qemu_chardev_new("label-file", TYPE_CHARDEV_FILE, &backend, &error_abort); =20 qemu_chr_fe_init(&be, chr, &error_abort); @@ -527,6 +529,12 @@ static void char_file_test(void) fe_event, &fe, NULL, true); =20 + g_assert_cmpint(fe.last_event, !=3D, CHR_EVENT_BREAK); + qmp_chardev_send_break("label-foo", NULL); + g_assert_cmpint(fe.last_event, !=3D, CHR_EVENT_BREAK); + qmp_chardev_send_break("label-file", NULL); + g_assert_cmpint(fe.last_event, =3D=3D, CHR_EVENT_BREAK); + main_loop(); =20 close(fd); diff --git a/tests/test-hmp.c b/tests/test-hmp.c index 99e35ec15a..6dfa0c36e2 100644 --- a/tests/test-hmp.c +++ b/tests/test-hmp.c @@ -22,6 +22,7 @@ static int verbose; static const char *hmp_cmds[] =3D { "boot_set ndc", "chardev-add null,id=3Dtestchardev1", + "chardev-send-break testchardev2", "chardev-remove testchardev1", "commit all", "cpu-add 1", --=20 2.13.0