static void graph_tracer_exit(const struct caller *this_fn, int depth) { struct trace_graph_item trace = { .depth = depth, .type = TRACE_GRAPH_RETURN, .entry_time = entry_time[depth], .return_time = clock_get_time(), }; pstrcpy(trace.fname, sizeof(trace.fname), this_fn->name); get_thread_name(trace.tname); trace_buffer_push(sched_getcpu(), &trace); }
static void graph_tracer_enter(const struct caller *this_fn, int depth) { struct trace_graph_item trace = { .type = TRACE_GRAPH_ENTRY, .depth = depth, }; pstrcpy(trace.fname, sizeof(trace.fname), this_fn->name); get_thread_name(trace.tname); entry_time[depth] = clock_get_time(); trace_buffer_push(sched_getcpu(), &trace); }
static notrace void default_trace_graph_return(struct trace_graph_item *item) { trace_buffer_push(sched_getcpu(), item); }