add softirq list
authorcompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Thu, 6 Dec 2007 21:01:00 +0000 (21:01 +0000)
committercompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Thu, 6 Dec 2007 21:01:00 +0000 (21:01 +0000)
git-svn-id: http://ltt.polymtl.ca/svn@2790 04897980-b3bd-0310-b5e0-8ef037075253

ltt/branches/poly/lttv/lttv/print.c
ltt/branches/poly/lttv/lttv/state.c
ltt/branches/poly/lttv/lttv/state.h

index 47faf53cb13dcb5660e46b0858067a227dccd697..d4e49cccfe22cb414f5f58508f7e06dd6b08d3f6 100644 (file)
@@ -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,
index 7b6495dccac9535fb5f0d0cdc91c6edc010c5907..1e7d1d2b120b59a0fb306b6ece649886e457f923 100644 (file)
@@ -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");
index 70092f8c4f5d58599de3e94442e8973e7b80e409..87a89b992c213e243c67567c0f0aef1be849d4b4 100644 (file)
@@ -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 */
 
This page took 0.026871 seconds and 4 git commands to generate.