Skip to content

Commit 0172afe

Browse files
KAGA-KOKOrostedt
authored andcommitted
tracing: Record task flag NEED_RESCHED_LAZY.
The scheduler added NEED_RESCHED_LAZY scheduling. Record this state as part of trace flags and expose it in the need_resched field. Record and expose NEED_RESCHED_LAZY. [bigeasy: Commit description, documentation bits.] Cc: Peter Zijlstra <peterz@infradead.org> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Link: https://lore.kernel.org/20241122202849.7DfYpJR0@linutronix.de Reviewed-by: Ankur Arora <ankur.a.arora@oracle.com> Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
1 parent 06afb0f commit 0172afe

File tree

4 files changed

+20
-1
lines changed

4 files changed

+20
-1
lines changed

Documentation/trace/ftrace.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,9 +1033,13 @@ explains which is which.
10331033
irqs-off: 'd' interrupts are disabled. '.' otherwise.
10341034

10351035
need-resched:
1036+
- 'B' all, TIF_NEED_RESCHED, PREEMPT_NEED_RESCHED and TIF_RESCHED_LAZY is set,
10361037
- 'N' both TIF_NEED_RESCHED and PREEMPT_NEED_RESCHED is set,
10371038
- 'n' only TIF_NEED_RESCHED is set,
10381039
- 'p' only PREEMPT_NEED_RESCHED is set,
1040+
- 'L' both PREEMPT_NEED_RESCHED and TIF_RESCHED_LAZY is set,
1041+
- 'b' both TIF_NEED_RESCHED and TIF_RESCHED_LAZY is set,
1042+
- 'l' only TIF_RESCHED_LAZY is set
10391043
- '.' otherwise.
10401044

10411045
hardirq/softirq:

include/linux/trace_events.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ unsigned int tracing_gen_ctx_irq_test(unsigned int irqs_status);
184184

185185
enum trace_flag_type {
186186
TRACE_FLAG_IRQS_OFF = 0x01,
187+
TRACE_FLAG_NEED_RESCHED_LAZY = 0x02,
187188
TRACE_FLAG_NEED_RESCHED = 0x04,
188189
TRACE_FLAG_HARDIRQ = 0x08,
189190
TRACE_FLAG_SOFTIRQ = 0x10,

kernel/trace/trace.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2552,6 +2552,8 @@ unsigned int tracing_gen_ctx_irq_test(unsigned int irqs_status)
25522552
trace_flags |= TRACE_FLAG_NEED_RESCHED;
25532553
if (test_preempt_need_resched())
25542554
trace_flags |= TRACE_FLAG_PREEMPT_RESCHED;
2555+
if (IS_ENABLED(CONFIG_ARCH_HAS_PREEMPT_LAZY) && tif_test_bit(TIF_NEED_RESCHED_LAZY))
2556+
trace_flags |= TRACE_FLAG_NEED_RESCHED_LAZY;
25552557
return (trace_flags << 16) | (min_t(unsigned int, pc & 0xff, 0xf)) |
25562558
(min_t(unsigned int, migration_disable_value(), 0xf)) << 4;
25572559
}

kernel/trace/trace_output.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,17 +462,29 @@ int trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry)
462462
bh_off ? 'b' :
463463
'.';
464464

465-
switch (entry->flags & (TRACE_FLAG_NEED_RESCHED |
465+
switch (entry->flags & (TRACE_FLAG_NEED_RESCHED | TRACE_FLAG_NEED_RESCHED_LAZY |
466466
TRACE_FLAG_PREEMPT_RESCHED)) {
467+
case TRACE_FLAG_NEED_RESCHED | TRACE_FLAG_NEED_RESCHED_LAZY | TRACE_FLAG_PREEMPT_RESCHED:
468+
need_resched = 'B';
469+
break;
467470
case TRACE_FLAG_NEED_RESCHED | TRACE_FLAG_PREEMPT_RESCHED:
468471
need_resched = 'N';
469472
break;
473+
case TRACE_FLAG_NEED_RESCHED_LAZY | TRACE_FLAG_PREEMPT_RESCHED:
474+
need_resched = 'L';
475+
break;
476+
case TRACE_FLAG_NEED_RESCHED | TRACE_FLAG_NEED_RESCHED_LAZY:
477+
need_resched = 'b';
478+
break;
470479
case TRACE_FLAG_NEED_RESCHED:
471480
need_resched = 'n';
472481
break;
473482
case TRACE_FLAG_PREEMPT_RESCHED:
474483
need_resched = 'p';
475484
break;
485+
case TRACE_FLAG_NEED_RESCHED_LAZY:
486+
need_resched = 'l';
487+
break;
476488
default:
477489
need_resched = '.';
478490
break;

0 commit comments

Comments
 (0)