History

sched: Use trace_call__<tp>() to save a static branch

The wrapper functions __trace_set_current_state() and __trace_set_need_resched() allow the tracepoints to be called from code outside sched/core.c, those calls are already guarded by a tracepoint_enabled(<tp>) so there is no need to repeat this check once again inside the call using trace_<tp>(). Use the new trace_call__<tp>() API to directly call the tracepoint without check. Those helper functions must be called after the appropriate check.

Gabriele Monaco committed 6 months ago

Commit 4ac4d651 parent 7fd2df21 file · +11 −3Browse files

Unified · Split

kernel/sched/core.c+11−3
@@ -537,10 +537,14 @@ sched_core_dequeue(struct rq *rq, struct task_struct *p, int flags) { } · 536 unmodified lines
537537 /* need a wrapper since we may need to trace from modules */
538538 EXPORT_TRACEPOINT_SYMBOL(sched_set_state_tp);
539539
540−/* Call via the helper macro trace_set_current_state. */
540+/*
541+ * Call via the helper macro trace_set_current_state.
542+ * Calls to this function MUST be guarded by a
543+ * tracepoint_enabled(sched_set_state_tp)
544+ */
541545 void __trace_set_current_state(int state_value)
542546 {
543− trace_sched_set_state_tp(current, state_value);
547+ trace_call__sched_set_state_tp(current, state_value);
544548 }
545549 EXPORT_SYMBOL(__trace_set_current_state);
546550
@@ -1203,9 +1207,13 @@ static void __resched_curr(struct rq *rq, int tif) · 656 unmodified lines
12031207 }
12041208 }
12051209
1210+/*
1211+ * Calls to this function MUST be guarded by a
1212+ * tracepoint_enabled(sched_set_need_resched_tp)
1213+ */
12061214 void __trace_set_need_resched(struct task_struct *curr, int tif)
12071215 {
1208− trace_sched_set_need_resched_tp(curr, smp_processor_id(), tif);
1216+ trace_call__sched_set_need_resched_tp(curr, smp_processor_id(), tif);
12091217 }
12101218 EXPORT_SYMBOL_GPL(__trace_set_need_resched);
12111219