From patchwork Wed Oct 20 09:58:49 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Prerna Saxena X-Patchwork-Id: 68419 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id CA05FB6EF0 for ; Wed, 20 Oct 2010 21:03:31 +1100 (EST) Received: from localhost ([127.0.0.1]:39721 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P8VVv-0006HC-NW for incoming@patchwork.ozlabs.org; Wed, 20 Oct 2010 06:03:20 -0400 Received: from [140.186.70.92] (port=58963 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P8VTQ-0005cl-Jp for qemu-devel@nongnu.org; Wed, 20 Oct 2010 06:00:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1P8VTO-00027x-TS for qemu-devel@nongnu.org; Wed, 20 Oct 2010 06:00:44 -0400 Received: from e23smtp07.au.ibm.com ([202.81.31.140]:46498) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1P8VTO-00027R-D2 for qemu-devel@nongnu.org; Wed, 20 Oct 2010 06:00:42 -0400 Received: from d23relay04.au.ibm.com (d23relay04.au.ibm.com [202.81.31.246]) by e23smtp07.au.ibm.com (8.14.4/8.13.1) with ESMTP id o9KA0d1R023023 for ; Wed, 20 Oct 2010 21:00:39 +1100 Received: from d23av03.au.ibm.com (d23av03.au.ibm.com [9.190.234.97]) by d23relay04.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o9KA0dpM2359496 for ; Wed, 20 Oct 2010 21:00:39 +1100 Received: from d23av03.au.ibm.com (loopback [127.0.0.1]) by d23av03.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id o9KA0chZ009891 for ; Wed, 20 Oct 2010 21:00:38 +1100 Received: from zephyr ([9.124.35.82]) by d23av03.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id o9KA0beE009839; Wed, 20 Oct 2010 21:00:37 +1100 Date: Wed, 20 Oct 2010 15:28:49 +0530 From: Prerna Saxena To: qemu-devel Message-ID: <20101020152849.6e714234@zephyr> Organization: IBM X-Mailer: Claws Mail 3.7.6 (GTK+ 2.20.1; i386-redhat-linux-gnu) Mime-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) Cc: Mahesh , Ananth Narayan , Stefan Hajnoczi , Luiz Capitulino Subject: [Qemu-devel] [Tracing][RFC] QMP interface to toggle state of a trace-event X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org QMP command trace-event to toggle state of a trace-event. Illustration : -> { "execute": "trace-event", "arguments": { "name": "qemu_malloc", "option": true} } <- { "return": {} } Posting this as an RFC for now. I'll post the final version as a part of the cumulative QMP patchset for tracing ( including patches for query-* commands posted earlier : http://lists.gnu.org/archive/html/qemu-devel/2010-10/msg01232.html ) Signed-off-by: Prerna Saxena --- hmp-commands.hx | 2 +- monitor.c | 43 +++++++++++++++++++++++++++++++++++++------ qmp-commands.hx | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 7 deletions(-) diff --git a/hmp-commands.hx b/hmp-commands.hx index 81999aa..76ec2fe 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -149,7 +149,7 @@ ETEXI .args_type = "name:s,option:b", .params = "name on|off", .help = "changes status of a specific trace event", - .mhandler.cmd = do_change_trace_event_state, + .mhandler.cmd = do_change_trace_event_state_hmp, }, STEXI diff --git a/monitor.c b/monitor.c index c7e1f53..0766ed3 100644 --- a/monitor.c +++ b/monitor.c @@ -545,17 +545,43 @@ static void do_help_cmd(Monitor *mon, const QDict *qdict) } #ifdef CONFIG_SIMPLE_TRACE -static void do_change_trace_event_state(Monitor *mon, const QDict *qdict) + +/** + * HMP handler to change trace event state. + * + */ +void do_change_trace_event_state_hmp(Monitor *mon, const QDict *qdict) { - const char *tp_name = qdict_get_str(qdict, "name"); - bool new_state = qdict_get_bool(qdict, "option"); - int ret = st_change_trace_event_state(tp_name, new_state); + if (!do_change_trace_event_state_generic(qdict)) { + monitor_printf(mon, "unknown event name \"%s\"\n", + qdict_get_str(qdict, "name")); + } +} - if (!ret) { - monitor_printf(mon, "unknown event name \"%s\"\n", tp_name); +/** + * QMP handler to change trace event state. + * + */ +static int do_change_trace_event_state_qmp(Monitor *mon, const QDict *qdict, + QObject **ret_data) +{ + if (!do_change_trace_event_state_generic(qdict)) { + qerror_report(QERR_INVALID_PARAMETER, qdict_get_str(qdict, "name")); + return -1; } + return 0; } +/** + * Generic handler to change trace event state. + * + */ +static int do_change_trace_event_state_generic(const QDict *qdict) +{ + const char *tp_name = qdict_get_str(qdict, "name"); + bool new_state = qdict_get_bool(qdict, "option"); + return st_change_trace_event_state(tp_name, new_state); +} static void do_trace_file(Monitor *mon, const QDict *qdict) { const char *op = qdict_get_try_str(qdict, "op"); @@ -583,6 +609,11 @@ static void do_info_trace_file_to_qmp(Monitor *mon, QObject **ret_data) { *ret_data = st_print_file_to_qobject(); } + +#else +static int do_change_trace_event_state_qmp(Monitor *mon, const QDict *qdict, +QObject **ret_data) {} + #endif static void user_monitor_complete(void *opaque, QObject *ret_data) diff --git a/qmp-commands.hx b/qmp-commands.hx index bc79b55..7613d73 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -761,6 +761,38 @@ Example: Note: This command must be issued before issuing any other command. +EQMP + + { + .name = "trace-event", + .args_type = "name:s,option:b", + .params = "name on|off", + .help = "changes state of a specific trace event", + .user_print = monitor_user_noop, + .mhandler.cmd_new = do_change_trace_event_state_qmp, + }, + +SQMP +trace-event +----------- + +Change state of a trace-event. + +Arguments: + +- "name": name of trace-event (json-string) +- "option": new state for the trace-event (json-bool) + +Example: + +-> { "execute": "trace-event", "arguments": { "name": "ABC", "option":false } } +<- { "return": {} } + +Notes: + +(1) The 'query-trace-events' command should be used to check the new state + of the trace-event. + 3. Query Commands =================