LTT_FIELD_ADDRESS,
LTT_FIELD_SYMBOL,
LTT_FIELD_IP,
- LTT_FIELD_FD;
+ LTT_FIELD_FD,
+ LTT_FIELD_STATE,
+ LTT_FIELD_CPU_ID;
LttvExecutionMode
LTTV_STATE_MODE_UNKNOWN,
static LttvBdevState *bdevstate_copy(LttvBdevState *bds);
-#if (__SIZEOF_LONG__ == 4)
+#if (__WORDSIZE == 32)
guint guint64_hash(gconstpointer key)
{
guint64 ukey = *(const guint64 *)key;
static void expand_kprobe_table(LttvTraceState *ts, guint64 ip, char *symbol)
{
LttvNameTables *nt = ts->name_tables;
-#if (__SIZEOF_LONG__ == 4)
+#if (__WORDSIZE == 32)
guint64 *ip_ptr = g_new(guint64, 1);
g_hash_table_insert(nt->kprobe_hash, ip_ptr,
(gpointer)(glong)g_quark_from_string(symbol));
LttEventPosition *ep;
LttvTracesetContext *tsc = self->parent.ts_context;
+ int retval;
tracefiles_tree = lttv_attribute_find_subdir(container,
LTTV_STATE_TRACEFILES);
g_tree_remove(tsc->pqueue, tfc);
if(ep != NULL) {
- g_assert(ltt_tracefile_seek_position(tfc->tf, ep) == 0);
+ retval= ltt_tracefile_seek_position(tfc->tf, ep);
+ g_assert_cmpint(retval, ==, 0);
tfc->timestamp = ltt_event_time(ltt_tracefile_get_event(tfc->tf));
- g_assert(ltt_time_compare(tfc->timestamp, ltt_time_infinite) != 0);
+ g_assert_cmpint(ltt_time_compare(tfc->timestamp, ltt_time_infinite), !=, 0);
g_tree_insert(tsc->pqueue, tfc, tfc);
g_info("Restoring state for a tf at time %lu.%lu", tfc->timestamp.tv_sec, tfc->timestamp.tv_nsec);
} else {
g_string_free(fe_name, TRUE);
-#if (__SIZEOF_LONG__ == 4)
+#if (__WORDSIZE == 32)
name_tables->kprobe_hash = g_hash_table_new_full(guint64_hash, guint64_equal,
g_free, NULL);
#else
return FALSE;
}
+static gboolean sched_try_wakeup(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;
+ LttvProcessState *process;
+ gint woken_pid;
+ guint woken_cpu;
+
+ woken_pid = ltt_event_get_int(e, lttv_trace_get_hook_field(th, 0));
+ woken_cpu = ltt_event_get_unsigned(e, lttv_trace_get_hook_field(th, 1));
+
+ process = lttv_state_find_process_or_create(
+ (LttvTraceState*)s->parent.t_context,
+ woken_cpu, woken_pid,
+ &s->parent.timestamp);
+ process->state->s = LTTV_STATE_WAIT_CPU;
+ process->state->change = s->parent.timestamp;
+
+ g_debug("Wakeup: process %d on CPU %u\n", woken_pid, woken_cpu);
+
+ return FALSE;
+}
+
static gboolean schedchange(void *hook_data, void *call_data)
{
LttvTracefileState *s = (LttvTracefileState *)call_data;
LTT_FIELD_PREV_STATE),
schedchange, NULL, &hooks);
+ lttv_trace_find_hook(ts->parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_SCHED_TRY_WAKEUP,
+ FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_CPU_ID, LTT_FIELD_STATE),
+ sched_try_wakeup, NULL, &hooks);
+
lttv_trace_find_hook(ts->parent.t,
LTT_CHANNEL_KERNEL,
LTT_EVENT_PROCESS_FORK,
LTT_FIELD_SYMBOL = g_quark_from_string("symbol");
LTT_FIELD_IP = g_quark_from_string("ip");
LTT_FIELD_FD = g_quark_from_string("fd");
+ LTT_FIELD_STATE = g_quark_from_string("state");
+ LTT_FIELD_CPU_ID = g_quark_from_string("cpu_id");
LTTV_CPU_UNKNOWN = g_quark_from_string("unknown");
LTTV_CPU_IDLE = g_quark_from_string("idle");