From: compudj Date: Tue, 10 Jan 2006 20:36:55 +0000 (+0000) Subject: add softirq mode X-Git-Tag: v0.12.20~2029 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=faf074a30c5aaf8c12214c5bd3446f85248acc04;p=lttv.git add softirq mode git-svn-id: http://ltt.polymtl.ca/svn@1460 04897980-b3bd-0310-b5e0-8ef037075253 --- diff --git a/ltt/branches/poly/doc/developer/lttng-lttv-roadmap.html b/ltt/branches/poly/doc/developer/lttng-lttv-roadmap.html index 6d8a45e9..61ff426d 100644 --- a/ltt/branches/poly/doc/developer/lttng-lttv-roadmap.html +++ b/ltt/branches/poly/doc/developer/lttng-lttv-roadmap.html @@ -16,7 +16,6 @@ The % symbol marks who is interested in the realisation of the item.
LTTV Roadmap

* TODO
-(2) Make GUI Event list trigger state computation.
(2) state.c : add Softirq execution mode.
(3) Make LTTV aware of type formats defined in the XML file.
(3) Use a per architecture enumeration for traps.
diff --git a/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.eps b/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.eps index 61d480eb..98abddbe 100644 Binary files a/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.eps and b/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.eps differ diff --git a/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.png b/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.png index 2fc66511..98abddbe 100644 Binary files a/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.png and b/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.png differ diff --git a/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.svg b/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.svg new file mode 100644 index 00000000..4428218a --- /dev/null +++ b/ltt/branches/poly/doc/user/user_guide/docbook/lttv-color-list.svg @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + White : mode unknown or unnamed + + + + + + + + + Yellow : running in a trap + Orange : servicing an IRQ + Dark yellow : waiting for CPU + Dark purple : zombie + Dark green : waiting for fork + Magenta : process has exited + Pale blue : running in a system call + Green : running in user mode + Dark red : waiting for I/O + + Pink : running a softirq handler + + diff --git a/ltt/branches/poly/lttv/lttv/state.c b/ltt/branches/poly/lttv/lttv/state.c index 18d21fde..18518e87 100644 --- a/ltt/branches/poly/lttv/lttv/state.c +++ b/ltt/branches/poly/lttv/lttv/state.c @@ -48,6 +48,8 @@ GQuark LTT_EVENT_TRAP_EXIT, LTT_EVENT_IRQ_ENTRY, LTT_EVENT_IRQ_EXIT, + LTT_EVENT_SOFT_IRQ_ENTRY, + LTT_EVENT_SOFT_IRQ_EXIT, LTT_EVENT_SCHEDCHANGE, LTT_EVENT_FORK, LTT_EVENT_EXIT, @@ -60,6 +62,7 @@ GQuark LTT_FIELD_SYSCALL_ID, LTT_FIELD_TRAP_ID, LTT_FIELD_IRQ_ID, + LTT_FIELD_SOFT_IRQ_ID, LTT_FIELD_OUT, LTT_FIELD_IN, LTT_FIELD_OUT_STATE, @@ -73,7 +76,8 @@ LttvExecutionMode LTTV_STATE_USER_MODE, LTTV_STATE_SYSCALL, LTTV_STATE_TRAP, - LTTV_STATE_IRQ; + LTTV_STATE_IRQ, + LTTV_STATE_SOFT_IRQ; LttvExecutionSubmode LTTV_STATE_SUBMODE_UNKNOWN, @@ -728,6 +732,7 @@ typedef struct _LttvNameTables { GQuark *syscall_names; GQuark *trap_names; GQuark *irq_names; + GQuark *soft_irq_names; } LttvNameTables; @@ -846,6 +851,20 @@ create_name_tables(LttvTraceState *tcs) name_tables->irq_names[i] = g_quark_from_string(fe_name->str); } + /* + name_tables->soft_irq_names = g_new(GQuark, nb); + for(i = 0 ; i < nb ; i++) { + name_tables->soft_irq_names[i] = g_quark_from_string(ltt_enum_string_get(t, i)); + } + */ + + name_tables->soft_irq_names = g_new(GQuark, 256); + for(i = 0 ; i < 256 ; i++) { + g_string_printf(fe_name, "softirq %d", i); + name_tables->soft_irq_names[i] = g_quark_from_string(fe_name->str); + } + + g_string_free(fe_name, TRUE); } @@ -865,6 +884,7 @@ get_name_tables(LttvTraceState *tcs) tcs->syscall_names = name_tables->syscall_names; tcs->trap_names = name_tables->trap_names; tcs->irq_names = name_tables->irq_names; + tcs->soft_irq_names = name_tables->soft_irq_names; } @@ -884,6 +904,7 @@ free_name_tables(LttvTraceState *tcs) g_free(name_tables->syscall_names); g_free(name_tables->trap_names); g_free(name_tables->irq_names); + g_free(name_tables->soft_irq_names); g_free(name_tables); } @@ -1177,6 +1198,37 @@ static gboolean irq_exit(void *hook_data, void *call_data) return FALSE; } +static gboolean soft_irq_entry(void *hook_data, void *call_data) +{ + LttvTracefileState *s = (LttvTracefileState *)call_data; + LttEvent *e = ltt_tracefile_get_event(s->parent.tf); + guint8 fac_id = ltt_event_facility_id(e); + guint8 ev_id = ltt_event_eventtype_id(e); + LttvTraceHookByFacility *thf = (LttvTraceHookByFacility *)hook_data; + // g_assert(lttv_trace_hook_get_first((LttvTraceHook *)hook_data)->f1 != NULL); + g_assert(thf->f1 != NULL); + // g_assert(thf == lttv_trace_hook_get_first((LttvTraceHook *)hook_data)); + LttField *f = thf->f1; + + LttvExecutionSubmode submode; + + submode = ((LttvTraceState *)(s->parent.t_context))->soft_irq_names[ + ltt_event_get_unsigned(e, f)]; + + /* Do something with the info about being in user or system mode when int? */ + push_state(s, LTTV_STATE_SOFT_IRQ, submode); + return FALSE; +} + + +static gboolean soft_irq_exit(void *hook_data, void *call_data) +{ + LttvTracefileState *s = (LttvTracefileState *)call_data; + + pop_state(s, LTTV_STATE_SOFT_IRQ); + return FALSE; +} + static gboolean schedchange(void *hook_data, void *call_data) { @@ -1431,8 +1483,8 @@ void lttv_state_add_event_hooks(LttvTracesetState *self) /* Find the eventtype id for the following events and register the associated by id hooks. */ - hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 11); - hooks = g_array_set_size(hooks, 11); + hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 13); + hooks = g_array_set_size(hooks, 13); ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_KERNEL_ARCH, LTT_EVENT_SYSCALL_ENTRY, @@ -1470,34 +1522,46 @@ void lttv_state_add_event_hooks(LttvTracesetState *self) irq_exit, NULL, &g_array_index(hooks, LttvTraceHook, 5)); g_assert(!ret); + ret = lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_ENTRY, + LTT_FIELD_SOFT_IRQ_ID, 0, 0, + soft_irq_entry, NULL, &g_array_index(hooks, LttvTraceHook, 6)); + g_assert(!ret); + + ret = lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_EXIT, + 0, 0, 0, + soft_irq_exit, NULL, &g_array_index(hooks, LttvTraceHook, 7)); + g_assert(!ret); + ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_SCHEDCHANGE, LTT_FIELD_OUT, LTT_FIELD_IN, LTT_FIELD_OUT_STATE, - schedchange, NULL, &g_array_index(hooks, LttvTraceHook, 6)); + schedchange, NULL, &g_array_index(hooks, LttvTraceHook, 8)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_FORK, LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID, 0, - process_fork, NULL, &g_array_index(hooks, LttvTraceHook, 7)); + process_fork, NULL, &g_array_index(hooks, LttvTraceHook, 9)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_EXIT, LTT_FIELD_PID, 0, 0, - process_exit, NULL, &g_array_index(hooks, LttvTraceHook, 8)); + process_exit, NULL, &g_array_index(hooks, LttvTraceHook, 10)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_FREE, LTT_FIELD_PID, 0, 0, - process_free, NULL, &g_array_index(hooks, LttvTraceHook, 9)); + process_free, NULL, &g_array_index(hooks, LttvTraceHook, 11)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_FS, LTT_EVENT_EXEC, LTT_FIELD_FILENAME, 0, 0, - process_exec, NULL, &g_array_index(hooks, LttvTraceHook, 10)); + process_exec, NULL, &g_array_index(hooks, LttvTraceHook, 12)); g_assert(!ret); @@ -2130,6 +2194,7 @@ static void module_init() LTTV_STATE_SYSCALL = g_quark_from_string("system call"); LTTV_STATE_TRAP = g_quark_from_string("trap"); LTTV_STATE_IRQ = g_quark_from_string("irq"); + LTTV_STATE_SOFT_IRQ = g_quark_from_string("softirq"); LTTV_STATE_SUBMODE_UNKNOWN = g_quark_from_string("unknown submode"); LTTV_STATE_SUBMODE_NONE = g_quark_from_string("(no submode)"); LTTV_STATE_WAIT_CPU = g_quark_from_string("wait for cpu"); @@ -2164,6 +2229,8 @@ static void module_init() LTT_EVENT_TRAP_EXIT = g_quark_from_string("trap_exit"); LTT_EVENT_IRQ_ENTRY = g_quark_from_string("irq_entry"); LTT_EVENT_IRQ_EXIT = g_quark_from_string("irq_exit"); + LTT_EVENT_SOFT_IRQ_ENTRY = g_quark_from_string("soft_irq_entry"); + LTT_EVENT_SOFT_IRQ_EXIT = g_quark_from_string("soft_irq_exit"); LTT_EVENT_SCHEDCHANGE = g_quark_from_string("schedchange"); LTT_EVENT_FORK = g_quark_from_string("fork"); LTT_EVENT_EXIT = g_quark_from_string("exit"); @@ -2174,6 +2241,7 @@ static void module_init() LTT_FIELD_SYSCALL_ID = g_quark_from_string("syscall_id"); LTT_FIELD_TRAP_ID = g_quark_from_string("trap_id"); LTT_FIELD_IRQ_ID = g_quark_from_string("irq_id"); + LTT_FIELD_SOFT_IRQ_ID = g_quark_from_string("softirq_id"); LTT_FIELD_OUT = g_quark_from_string("out"); LTT_FIELD_IN = g_quark_from_string("in"); LTT_FIELD_OUT_STATE = g_quark_from_string("out_state"); diff --git a/ltt/branches/poly/lttv/lttv/state.h b/ltt/branches/poly/lttv/lttv/state.h index de8d36b8..bf6ad531 100644 --- a/ltt/branches/poly/lttv/lttv/state.h +++ b/ltt/branches/poly/lttv/lttv/state.h @@ -70,6 +70,8 @@ extern GQuark LTT_EVENT_TRAP_EXIT, LTT_EVENT_IRQ_ENTRY, LTT_EVENT_IRQ_EXIT, + LTT_EVENT_SOFT_IRQ_ENTRY, + LTT_EVENT_SOFT_IRQ_EXIT, LTT_EVENT_SCHEDCHANGE, LTT_EVENT_FORK, LTT_EVENT_EXIT, @@ -82,6 +84,7 @@ extern GQuark LTT_FIELD_SYSCALL_ID, LTT_FIELD_TRAP_ID, LTT_FIELD_IRQ_ID, + LTT_FIELD_SOFT_IRQ_ID, LTT_FIELD_OUT, LTT_FIELD_IN, LTT_FIELD_OUT_STATE, @@ -90,8 +93,6 @@ extern GQuark LTT_FIELD_PID, LTT_FIELD_NAME; -extern GQuark LTT_EVENT_SYSCALL_ENTRY; - typedef struct _LttvTracesetState LttvTracesetState; typedef struct _LttvTracesetStateClass LttvTracesetStateClass; @@ -141,6 +142,7 @@ extern LttvExecutionMode LTTV_STATE_SYSCALL, LTTV_STATE_TRAP, LTTV_STATE_IRQ, + LTTV_STATE_SOFT_IRQ, LTTV_STATE_MODE_UNKNOWN; @@ -255,6 +257,7 @@ struct _LttvTraceState { GQuark *syscall_names; GQuark *trap_names; GQuark *irq_names; + GQuark *soft_irq_names; LttTime *max_time_state_recomputed_in_seek; /* Array of per cpu running process */ diff --git a/ltt/branches/poly/lttv/lttv/stats.c b/ltt/branches/poly/lttv/lttv/stats.c index 23a9cca8..143c14e2 100644 --- a/ltt/branches/poly/lttv/lttv/stats.c +++ b/ltt/branches/poly/lttv/lttv/stats.c @@ -530,7 +530,6 @@ gboolean before_irq_entry(void *hook_data, void *call_data) return FALSE; } - gboolean after_irq_entry(void *hook_data, void *call_data) { update_event_tree((LttvTracefileStats *)call_data); @@ -552,6 +551,33 @@ gboolean after_irq_exit(void *hook_data, void *call_data) } +gboolean before_soft_irq_entry(void *hook_data, void *call_data) +{ + mode_change((LttvTracefileStats *)call_data); + return FALSE; +} + +gboolean after_soft_irq_entry(void *hook_data, void *call_data) +{ + update_event_tree((LttvTracefileStats *)call_data); + return FALSE; +} + + +gboolean before_soft_irq_exit(void *hook_data, void *call_data) +{ + mode_end((LttvTracefileStats *)call_data); + return FALSE; +} + + +gboolean after_soft_irq_exit(void *hook_data, void *call_data) +{ + update_event_tree((LttvTracefileStats *)call_data); + return FALSE; +} + + gboolean before_schedchange(void *hook_data, void *call_data) { LttvTracefileStats *tfcs = (LttvTracefileStats *)call_data; @@ -804,8 +830,8 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self) /* Find the eventtype id for the following events and register the associated by id hooks. */ - hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 7); - g_array_set_size(hooks, 7); + hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 9); + g_array_set_size(hooks, 9); ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL_ARCH, LTT_EVENT_SYSCALL_ENTRY, @@ -849,17 +875,31 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self) &g_array_index(hooks, LttvTraceHook, 5)); g_assert(!ret); + ret = lttv_trace_find_hook(ts->parent.parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_ENTRY, + LTT_FIELD_SOFT_IRQ_ID, 0, 0, + before_soft_irq_entry, NULL, + &g_array_index(hooks, LttvTraceHook, 6)); + g_assert(!ret); + + ret = lttv_trace_find_hook(ts->parent.parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_EXIT, + 0, 0, 0, + before_soft_irq_exit, NULL, + &g_array_index(hooks, LttvTraceHook, 7)); + g_assert(!ret); + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_SCHEDCHANGE, LTT_FIELD_OUT, LTT_FIELD_IN, LTT_FIELD_OUT_STATE, before_schedchange, NULL, - &g_array_index(hooks, LttvTraceHook, 6)); + &g_array_index(hooks, LttvTraceHook, 8)); g_assert(!ret); before_hooks = hooks; - hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 9); - g_array_set_size(hooks, 9); + hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 11); + g_array_set_size(hooks, 11); ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL_ARCH, LTT_EVENT_SYSCALL_ENTRY, @@ -903,26 +943,39 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self) &g_array_index(hooks, LttvTraceHook, 5)); g_assert(!ret); + ret = lttv_trace_find_hook(ts->parent.parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_ENTRY, + LTT_FIELD_SOFT_IRQ_ID, 0, 0, + after_irq_entry, NULL, + &g_array_index(hooks, LttvTraceHook, 6)); + g_assert(!ret); + + ret = lttv_trace_find_hook(ts->parent.parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_EXIT, + 0, 0, 0, + after_soft_irq_exit, NULL, + &g_array_index(hooks, LttvTraceHook, 7)); + g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_FORK, LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID, 0, process_fork, NULL, - &g_array_index(hooks, LttvTraceHook, 6)); + &g_array_index(hooks, LttvTraceHook, 8)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_EXIT, LTT_FIELD_PID, 0, 0, process_exit, NULL, - &g_array_index(hooks, LttvTraceHook, 7)); + &g_array_index(hooks, LttvTraceHook, 9)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_FREE, LTT_FIELD_PID, 0, 0, process_free, NULL, - &g_array_index(hooks, LttvTraceHook, 8)); + &g_array_index(hooks, LttvTraceHook, 10)); g_assert(!ret); diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c index b461e8a4..4fade313 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c @@ -72,7 +72,8 @@ GdkColor drawing_colors[NUM_COLORS] = { 0, 0x0000, 0xFF00, 0x0000 }, /* COL_RUN_USER_MODE : green */ { 0, 0x0100, 0x9E00, 0xFFFF }, /* COL_RUN_SYSCALL : pale blue */ { 0, 0xFF00, 0xFF00, 0x0100 }, /* COL_RUN_TRAP : yellow */ - { 0, 0xFFFF, 0x5E00, 0x0000 }, /* COL_RUN_IRQ : red */ + { 0, 0xFFFF, 0x5E00, 0x0000 }, /* COL_RUN_IRQ : orange */ + { 0, 0xFFFF, 0x9400, 0x9600 }, /* COL_RUN_SOFT_IRQ : pink */ { 0, 0x6600, 0x0000, 0x0000 }, /* COL_WAIT : dark red */ { 0, 0x7700, 0x7700, 0x0000 }, /* COL_WAIT_CPU : dark yellow */ { 0, 0x6400, 0x0000, 0x5D00 }, /* COL_ZOMBIE : dark purple */ @@ -219,7 +220,7 @@ void drawing_data_request(Drawing_t *drawing, associated by id hooks. */ hooks = g_array_new(FALSE, FALSE, sizeof(LttvTraceHook)); - hooks = g_array_set_size(hooks, 13); + hooks = g_array_set_size(hooks, 15); /* before hooks */ @@ -271,12 +272,29 @@ void drawing_data_request(Drawing_t *drawing, &g_array_index(hooks, LttvTraceHook, 5)); g_assert(!ret); + ret = lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_ENTRY, + LTT_FIELD_SOFT_IRQ_ID, 0, 0, + before_execmode_hook, + events_request, + &g_array_index(hooks, LttvTraceHook, 6)); + g_assert(!ret); + + ret = lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_EXIT, + 0, 0, 0, + before_execmode_hook, + events_request, + &g_array_index(hooks, LttvTraceHook, 7)); + g_assert(!ret); + + ret = lttv_trace_find_hook(ts->parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_SCHEDCHANGE, LTT_FIELD_OUT, LTT_FIELD_IN, LTT_FIELD_OUT_STATE, before_schedchange_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 6)); + &g_array_index(hooks, LttvTraceHook, 8)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, @@ -284,7 +302,7 @@ void drawing_data_request(Drawing_t *drawing, LTT_FIELD_PID, 0, 0, before_process_exit_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 7)); + &g_array_index(hooks, LttvTraceHook, 9)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, @@ -292,7 +310,7 @@ void drawing_data_request(Drawing_t *drawing, LTT_FIELD_PID, 0, 0, before_process_release_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 8)); + &g_array_index(hooks, LttvTraceHook, 10)); g_assert(!ret); @@ -350,7 +368,7 @@ void drawing_data_request(Drawing_t *drawing, LTT_FIELD_OUT, LTT_FIELD_IN, LTT_FIELD_OUT_STATE, after_schedchange_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 9)); + &g_array_index(hooks, LttvTraceHook, 11)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, @@ -358,7 +376,7 @@ void drawing_data_request(Drawing_t *drawing, LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID, 0, after_process_fork_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 10)); + &g_array_index(hooks, LttvTraceHook, 12)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, @@ -366,7 +384,7 @@ void drawing_data_request(Drawing_t *drawing, LTT_FIELD_PID, 0, 0, after_process_exit_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 11)); + &g_array_index(hooks, LttvTraceHook, 13)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, @@ -374,7 +392,7 @@ void drawing_data_request(Drawing_t *drawing, 0, 0, 0, after_fs_exec_hook, events_request, - &g_array_index(hooks, LttvTraceHook, 12)); + &g_array_index(hooks, LttvTraceHook, 14)); g_assert(!ret); @@ -391,7 +409,7 @@ void drawing_data_request(Drawing_t *drawing, /* Add these hooks to each event_by_id hooks list */ /* add before */ - for(k = 0 ; k < 9 ; k++) { + for(k = 0 ; k < 11 ; k++) { hook = &g_array_index(hooks, LttvTraceHook, k); for(l=0;lfac_list->len;l++) { thf = g_array_index(hook->fac_list, LttvTraceHookByFacility*, l); @@ -403,7 +421,7 @@ void drawing_data_request(Drawing_t *drawing, } /* add after */ - for(k = 9 ; k < 13 ; k++) { + for(k = 11 ; k < 15 ; k++) { hook = &g_array_index(hooks, LttvTraceHook, k); for(l=0;lfac_list->len;l++) { thf = g_array_index(hook->fac_list, LttvTraceHookByFacility*, l); diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.h b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.h index 9f2b9360..58f562a2 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.h +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.h @@ -39,7 +39,8 @@ typedef enum _draw_color { COL_RUN_USER_MODE,/* green */ COL_RUN_SYSCALL, /* pale blue */ COL_RUN_TRAP, /* yellow */ - COL_RUN_IRQ, /* red */ + COL_RUN_IRQ, /* orange */ + COL_RUN_SOFT_IRQ, /* red */ COL_WAIT, /* dark red */ COL_WAIT_CPU, /* dark yellow */ COL_ZOMBIE, /* dark purple */ diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c index c2b16dfa..22015eaf 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c @@ -279,6 +279,8 @@ static inline PropertiesLine prepare_s_e_line(LttvProcessState *process) prop_line.color = drawing_colors[COL_RUN_TRAP]; else if(process->state->t == LTTV_STATE_IRQ) prop_line.color = drawing_colors[COL_RUN_IRQ]; + else if(process->state->t == LTTV_STATE_SOFT_IRQ) + prop_line.color = drawing_colors[COL_RUN_SOFT_IRQ]; else if(process->state->t == LTTV_STATE_MODE_UNKNOWN) prop_line.color = drawing_colors[COL_MODE_UNKNOWN]; else diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/pixmaps/lttv-color-list.png b/ltt/branches/poly/lttv/modules/gui/lttvwindow/pixmaps/lttv-color-list.png index 2fc66511..98abddbe 100644 Binary files a/ltt/branches/poly/lttv/modules/gui/lttvwindow/pixmaps/lttv-color-list.png and b/ltt/branches/poly/lttv/modules/gui/lttvwindow/pixmaps/lttv-color-list.png differ