X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=lttv%2Flttv%2Fstate.c;h=38d3ba4a5f8d8cfd6264428b1f72336e3dea0a59;hb=556b540ae4beba8dd3dd0d628e149c6b93eb4c29;hp=475c2305b6e7b2654d54061e3af42b12eba7f218;hpb=f044974e2d3eee32dfca594025cad1afc790c84f;p=lttv.git diff --git a/lttv/lttv/state.c b/lttv/lttv/state.c index 475c2305..38d3ba4a 100644 --- a/lttv/lttv/state.c +++ b/lttv/lttv/state.c @@ -20,7 +20,7 @@ #ifdef HAVE_CONFIG_H #include #endif - + #include #include #include @@ -1839,8 +1839,6 @@ static void state_saved_free(LttvTraceState *self, LttvAttribute *container) { guint i, nb_tracefile, nb_cpus, nb_irqs, nb_soft_irqs; - LttvTracefileState *tfcs; - LttvAttribute *tracefiles_tree, *tracefile_tree; guint *running_process; @@ -1900,9 +1898,7 @@ static void state_saved_free(LttvTraceState *self, LttvAttribute *container) nb_tracefile = self->parent.tracefiles->len; for(i = 0 ; i < nb_tracefile ; i++) { - tfcs = - LTTV_TRACEFILE_STATE(g_array_index(self->parent.tracefiles, - LttvTracefileContext*, i)); + type = lttv_attribute_get(tracefiles_tree, i, &name, &value, &is_named); g_assert(type == LTTV_GOBJECT); tracefile_tree = *((LttvAttribute **)(value.v_gobject)); @@ -2020,9 +2016,9 @@ static void create_name_tables(LttvTraceState *tcs) // } // } - name_tables->nb_syscalls = 256; - name_tables->syscall_names = g_new(GQuark, 256); - for(i = 0 ; i < 256 ; i++) { + name_tables->nb_syscalls = PREALLOC_NB_SYSCALLS; + name_tables->syscall_names = g_new(GQuark, name_tables->nb_syscalls); + for(i = 0 ; i < name_tables->nb_syscalls; i++) { g_string_printf(fe_name, "syscall %d", i); name_tables->syscall_names[i] = g_quark_from_string(fe_name->str); } @@ -2054,9 +2050,9 @@ static void create_name_tables(LttvTraceState *tcs) // ltt_enum_string_get(t, i)); // } - name_tables->nb_traps = 256; - name_tables->trap_names = g_new(GQuark, 256); - for(i = 0 ; i < 256 ; i++) { + name_tables->nb_traps = PREALLOC_NB_TRAPS; + name_tables->trap_names = g_new(GQuark, name_tables->nb_traps); + for(i = 0 ; i < name_tables->nb_traps; i++) { g_string_printf(fe_name, "trap %d", i); name_tables->trap_names[i] = g_quark_from_string(fe_name->str); } @@ -2079,11 +2075,10 @@ static void create_name_tables(LttvTraceState *tcs) } */ /* FIXME: LttvIRQState *irq_states should become a g_array */ - /* temp fix: increase from 256 to 512 default size */ - name_tables->nb_irqs = 512; - name_tables->irq_names = g_new(GQuark, 512); - for(i = 0 ; i < 512 ; i++) { + name_tables->nb_irqs = PREALLOC_NB_IRQS; + name_tables->irq_names = g_new(GQuark, name_tables->nb_irqs); + for(i = 0 ; i < name_tables->nb_irqs; i++) { g_string_printf(fe_name, "irq %d", i); name_tables->irq_names[i] = g_quark_from_string(fe_name->str); } @@ -2099,8 +2094,7 @@ static void create_name_tables(LttvTraceState *tcs) } */ - /* the kernel is limited to 32 statically defined softirqs */ - name_tables->nb_soft_irqs = 32; + name_tables->nb_soft_irqs = PREALLOC_NB_SOFT_IRQS; name_tables->soft_irq_names = g_new(GQuark, name_tables->nb_soft_irqs); for(i = 0 ; i < name_tables->nb_soft_irqs ; i++) { g_string_printf(fe_name, "softirq %d", i); @@ -2697,21 +2691,10 @@ static gboolean soft_irq_raise(void *hook_data, void *call_data) //guint8 ev_id = ltt_event_eventtype_id(e); LttvTraceHook *th = (LttvTraceHook *)hook_data; struct marker_field *f = lttv_trace_get_hook_field(th, 0); - LttvNameTables *nt = ((LttvTraceState *)(s->parent.t_context))->name_tables; - LttvExecutionSubmode submode; guint64 softirq = ltt_event_get_long_unsigned(e, f); - guint64 nb_softirqs = nt->nb_soft_irqs; - if(softirq < nb_softirqs) { - submode = nt->soft_irq_names[softirq]; - } else { - /* Fixup an incomplete irq table */ - GString *string = g_string_new(""); - g_string_printf(string, "softirq %" PRIu64, softirq); - submode = g_quark_from_string(string->str); - g_string_free(string, TRUE); - } + expand_soft_irq_table(ts, softirq); /* update softirq status */ /* a soft irq raises are not cumulative */ @@ -2906,11 +2889,9 @@ static gboolean dump_syscall(void *hook_data, void *call_data) 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)); expand_syscall_table(ts, id); @@ -2944,11 +2925,9 @@ static gboolean dump_softirq(void *hook_data, void *call_data) 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)); expand_soft_irq_table(ts, id); @@ -3083,7 +3062,6 @@ static gboolean process_fork(void *hook_data, void *call_data) LttvTracefileState *s = (LttvTracefileState *)call_data; LttEvent *e = ltt_tracefile_get_event(s->parent.tf); LttvTraceHook *th = (LttvTraceHook *)hook_data; - guint parent_pid; guint child_pid; /* In the Linux Kernel, there is one PID per thread. */ guint child_tgid; /* tgid in the Linux kernel is the "real" POSIX PID. */ //LttvProcessState *zombie_process; @@ -3093,8 +3071,7 @@ static gboolean process_fork(void *hook_data, void *call_data) LttvProcessState *child_process; struct marker_field *f; - /* Parent PID */ - parent_pid = ltt_event_get_unsigned(e, lttv_trace_get_hook_field(th, 0)); + /* Skip Parent PID param */ /* Child PID */ child_pid = ltt_event_get_unsigned(e, lttv_trace_get_hook_field(th, 1)); @@ -3450,7 +3427,7 @@ static gboolean enum_process_state(void *hook_data, void *call_data) LttvProcessState *process = ts->running_process[cpu]; LttvProcessState *parent_process; struct marker_field *f; - GQuark type, mode, submode, status; + GQuark type; LttvExecutionState *es; guint i, nb_cpus; @@ -3470,17 +3447,11 @@ static gboolean enum_process_state(void *hook_data, void *call_data) //FIXME: type is rarely used, enum must match possible types. - /* mode */ - f = lttv_trace_get_hook_field(th, 4); - mode = ltt_enum_string_get(f,ltt_event_get_unsigned(e, f)); + /* Skip mode 4th param */ - /* submode */ - f = lttv_trace_get_hook_field(th, 5); - submode = ltt_enum_string_get(f, ltt_event_get_unsigned(e, f)); + /* Skip submode 5th param */ - /* status */ - f = lttv_trace_get_hook_field(th, 6); - status = ltt_enum_string_get(f, ltt_event_get_unsigned(e, f)); + /* Skip status 6th param */ /* TGID */ f = lttv_trace_get_hook_field(th, 7);