On Wed, 20 Oct 2010 15:28:49 +0530 Prerna Saxena <pre...@linux.vnet.ibm.com> wrote:
> 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 <pre...@linux.vnet.ibm.com> > --- > 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) This should be called 'enabled'. I think you should submit a new series containing only the proposed interfaces documentation (one patch per interface) and the intro email should describe the use cases the proposed interfaces are supposed to address. > + > +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 > ================= >