Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9fa599d authored by Lingutla Chandrasekhar's avatar Lingutla Chandrasekhar Committed by Gerrit - the friendly Code Review server
Browse files

trace: Add trace points for tasklet entry/exit



Tasklets are supposed to finish their work quickly and
should not block the current running process, but it is not
guaranteed that. Currently softirq_entry/exit can be used to
know total tasklets execution time, but not helpful to track
individual tasklet's execution time. With that we can't find
any culprit tasklet function, which is taking more time.

Add {hi}-tasklet_entry/exit trace point support to track
individual tasklet execution.

Change-Id: I3496d15f64d020916774e673ccb4a8116ea2f2c9
Signed-off-by: default avatarLingutla Chandrasekhar <clingutla@codeaurora.org>
parent ed7b5e23
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
@@ -160,6 +160,51 @@ DEFINE_EVENT(softirq, softirq_raise,
	TP_ARGS(vec_nr)
);

DECLARE_EVENT_CLASS(tasklet,

	TP_PROTO(void *func),

	TP_ARGS(func),

	TP_STRUCT__entry(
		__field( void *,	func)
	),

	TP_fast_assign(
		__entry->func = func;
	),

	TP_printk("function=%ps", __entry->func)
);

DEFINE_EVENT(tasklet, tasklet_entry,

	TP_PROTO(void *func),

	TP_ARGS(func)
);

DEFINE_EVENT(tasklet, tasklet_exit,

	TP_PROTO(void *func),

	TP_ARGS(func)
);

DEFINE_EVENT(tasklet, tasklet_hi_entry,

	TP_PROTO(void *func),

	TP_ARGS(func)
);

DEFINE_EVENT(tasklet, tasklet_hi_exit,

	TP_PROTO(void *func),

	TP_ARGS(func)
);

#endif /*  _TRACE_IRQ_H */

/* This part must be outside protection */
+2 −0
Original line number Diff line number Diff line
@@ -523,7 +523,9 @@ static void tasklet_action_common(struct softirq_action *a,
				if (!test_and_clear_bit(TASKLET_STATE_SCHED,
							&t->state))
					BUG();
				trace_tasklet_entry(t->func);
				t->func(t->data);
				trace_tasklet_exit(t->func);
				tasklet_unlock(t);
				continue;
			}