trace: [hmp] Reimplement "trace-event" and "info trace-events" using QMP
Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Message-id: 20140825112002.31112.60143.stgit@fimbulvetr.bsc.es Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
		
							parent
							
								
									1dde0f48d5
								
							
						
					
					
						commit
						14101d028d
					
				
							
								
								
									
										27
									
								
								monitor.c
								
								
								
								
							
							
						
						
									
										27
									
								
								monitor.c
								
								
								
								
							| 
						 | 
					@ -886,19 +886,12 @@ static void do_trace_event_set_state(Monitor *mon, const QDict *qdict)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    const char *tp_name = qdict_get_str(qdict, "name");
 | 
					    const char *tp_name = qdict_get_str(qdict, "name");
 | 
				
			||||||
    bool new_state = qdict_get_bool(qdict, "option");
 | 
					    bool new_state = qdict_get_bool(qdict, "option");
 | 
				
			||||||
 | 
					    Error *local_err = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool found = false;
 | 
					    qmp_trace_event_set_state(tp_name, new_state, true, true, &local_err);
 | 
				
			||||||
    TraceEvent *ev = NULL;
 | 
					    if (local_err) {
 | 
				
			||||||
    while ((ev = trace_event_pattern(tp_name, ev)) != NULL) {
 | 
					        qerror_report_err(local_err);
 | 
				
			||||||
        found = true;
 | 
					        error_free(local_err);
 | 
				
			||||||
        if (!trace_event_get_state_static(ev)) {
 | 
					 | 
				
			||||||
            monitor_printf(mon, "event \"%s\" is not traceable\n", tp_name);
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            trace_event_set_state_dynamic(ev, new_state);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (!trace_event_is_pattern(tp_name) && !found) {
 | 
					 | 
				
			||||||
        monitor_printf(mon, "unknown event name \"%s\"\n", tp_name);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1079,7 +1072,15 @@ static void do_info_cpu_stats(Monitor *mon, const QDict *qdict)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void do_trace_print_events(Monitor *mon, const QDict *qdict)
 | 
					static void do_trace_print_events(Monitor *mon, const QDict *qdict)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    trace_print_events((FILE *)mon, &monitor_fprintf);
 | 
					    TraceEventInfoList *events = qmp_trace_event_get_state("*", NULL);
 | 
				
			||||||
 | 
					    TraceEventInfoList *elem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (elem = events; elem != NULL; elem = elem->next) {
 | 
				
			||||||
 | 
					        monitor_printf(mon, "%s : state %u\n",
 | 
				
			||||||
 | 
					                       elem->value->name,
 | 
				
			||||||
 | 
					                       elem->value->state == TRACE_EVENT_STATE_ENABLED ? 1 : 0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    qapi_free_TraceEventInfoList(events);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int client_migrate_info(Monitor *mon, const QDict *qdict,
 | 
					static int client_migrate_info(Monitor *mon, const QDict *qdict,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -85,19 +85,6 @@ TraceEvent *trace_event_pattern(const char *pat, TraceEvent *ev)
 | 
				
			||||||
    return NULL;
 | 
					    return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void trace_print_events(FILE *stream, fprintf_function stream_printf)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    TraceEventID i;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for (i = 0; i < trace_event_count(); i++) {
 | 
					 | 
				
			||||||
        TraceEvent *ev = trace_event_id(i);
 | 
					 | 
				
			||||||
        stream_printf(stream, "%s [Event ID %u] : state %u\n",
 | 
					 | 
				
			||||||
                      trace_event_get_name(ev), i,
 | 
					 | 
				
			||||||
                      trace_event_get_state_static(ev) &&
 | 
					 | 
				
			||||||
                      trace_event_get_state_dynamic(ev));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void trace_init_events(const char *fname)
 | 
					static void trace_init_events(const char *fname)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Location loc;
 | 
					    Location loc;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -148,13 +148,6 @@ static void trace_event_set_state_dynamic(TraceEvent *ev, bool state);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * trace_print_events:
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Print the state of all events.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
void trace_print_events(FILE *stream, fprintf_function stream_printf);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * trace_init_backends:
 | 
					 * trace_init_backends:
 | 
				
			||||||
 * @events: Name of file with events to be enabled at startup; may be NULL.
 | 
					 * @events: Name of file with events to be enabled at startup; may be NULL.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue