From dc6b246703be1051c20919746dc34eccbc8912ea Mon Sep 17 00:00:00 2001 From: compudj Date: Thu, 6 Dec 2007 21:01:00 +0000 Subject: [PATCH] add softirq list git-svn-id: http://ltt.polymtl.ca/svn@2790 04897980-b3bd-0310-b5e0-8ef037075253 --- ltt/branches/poly/lttv/lttv/print.c | 6 ++++++ ltt/branches/poly/lttv/lttv/state.c | 28 +++++++++++++++++++++++++++- ltt/branches/poly/lttv/lttv/state.h | 3 ++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/ltt/branches/poly/lttv/lttv/print.c b/ltt/branches/poly/lttv/lttv/print.c index 47faf53c..d4e49ccc 100644 --- a/ltt/branches/poly/lttv/lttv/print.c +++ b/ltt/branches/poly/lttv/lttv/print.c @@ -55,7 +55,13 @@ static inline void print_enum_events(LttEvent *e, struct marker_field *f, f->name == LTT_FIELD_SYSCALL_ID) { g_string_append_printf(s, " [%s]", g_quark_to_string(ts->syscall_names[value])); + } else if ((info->name == g_quark_from_static_string("kernel_softirq_entry") + || info->name == g_quark_from_static_string("kernel_softirq_exit")) && + f->name == g_quark_from_static_string("softirq_id")) { + g_string_append_printf(s, " [%s]", + g_quark_to_string(ts->soft_irq_names[value])); } + } void lttv_print_field(LttEvent *e, struct marker_field *f, GString *s, diff --git a/ltt/branches/poly/lttv/lttv/state.c b/ltt/branches/poly/lttv/lttv/state.c index 7b6495dc..1e7d1d2b 100644 --- a/ltt/branches/poly/lttv/lttv/state.c +++ b/ltt/branches/poly/lttv/lttv/state.c @@ -81,7 +81,8 @@ GQuark LTT_EVENT_REQUEST_ISSUE, LTT_EVENT_REQUEST_COMPLETE, LTT_EVENT_LIST_INTERRUPT, - LTT_EVENT_SYS_CALL_TABLE; + LTT_EVENT_SYS_CALL_TABLE, + LTT_EVENT_SOFTIRQ_VEC; /* Fields Quarks */ @@ -2666,6 +2667,24 @@ static gboolean dump_syscall(void *hook_data, void *call_data) return FALSE; } +static gboolean dump_softirq(void *hook_data, void *call_data) +{ + LttvTracefileState *s = (LttvTracefileState *)call_data; + LttvTraceState *ts = (LttvTraceState*)s->parent.t_context; + LttEvent *e = ltt_tracefile_get_event(s->parent.tf); + LttvTraceHook *th = (LttvTraceHook *)hook_data; + guint id; + guint64 address; + char *symbol; + + id = ltt_event_get_unsigned(e, lttv_trace_get_hook_field(th, 0)); + address = ltt_event_get_long_unsigned(e, lttv_trace_get_hook_field(th, 1)); + symbol = ltt_event_get_string(e, lttv_trace_get_hook_field(th, 2)); + ts->soft_irq_names[id] = g_quark_from_string(symbol); + + return FALSE; +} + static gboolean schedchange(void *hook_data, void *call_data) { LttvTracefileState *s = (LttvTracefileState *)call_data; @@ -3396,6 +3415,12 @@ void lttv_state_add_event_hooks(LttvTracesetState *self) FIELD_ARRAY(LTT_FIELD_ID, LTT_FIELD_ADDRESS, LTT_FIELD_SYMBOL), dump_syscall, NULL, &hooks); + lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_STATEDUMP, + LTT_EVENT_SOFTIRQ_VEC, + FIELD_ARRAY(LTT_FIELD_ID, LTT_FIELD_ADDRESS, LTT_FIELD_SYMBOL), + dump_softirq, NULL, &hooks); + /* Add these hooks to each event_by_id hooks list */ nb_tracefile = ts->parent.tracefiles->len; @@ -4084,6 +4109,7 @@ static void module_init() LTT_EVENT_REQUEST_COMPLETE = g_quark_from_string("_blk_request_complete"); LTT_EVENT_LIST_INTERRUPT = g_quark_from_string("interrupt"); LTT_EVENT_SYS_CALL_TABLE = g_quark_from_string("sys_call_table"); + LTT_EVENT_SOFTIRQ_VEC = g_quark_from_string("softirq_vec"); LTT_FIELD_SYSCALL_ID = g_quark_from_string("syscall_id"); LTT_FIELD_TRAP_ID = g_quark_from_string("trap_id"); diff --git a/ltt/branches/poly/lttv/lttv/state.h b/ltt/branches/poly/lttv/lttv/state.h index 70092f8c..87a89b99 100644 --- a/ltt/branches/poly/lttv/lttv/state.h +++ b/ltt/branches/poly/lttv/lttv/state.h @@ -89,7 +89,8 @@ extern GQuark LTT_EVENT_REQUEST_ISSUE, LTT_EVENT_REQUEST_COMPLETE, LTT_EVENT_LIST_INTERRUPT, - LTT_EVENT_SYS_CALL_TABLE; + LTT_EVENT_SYS_CALL_TABLE, + LTT_EVENT_SOFTIRQ_VEC; /* Fields Quarks */ -- 2.34.1