diff options
author | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2021-12-13 11:08:53 +0100 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2022-01-13 16:23:04 -0500 |
commit | 289e7b0f7eb47b87a0441e6c81336316f301eb39 (patch) | |
tree | 48538debf71756dd4b53ceabde05da71bc63b440 /kernel/trace/trace_output.c | |
parent | 86599dbe2c5272588f859858239d1f52321eb0f9 (diff) | |
download | linux-stable-289e7b0f7eb47b87a0441e6c81336316f301eb39.tar.gz linux-stable-289e7b0f7eb47b87a0441e6c81336316f301eb39.tar.bz2 linux-stable-289e7b0f7eb47b87a0441e6c81336316f301eb39.zip |
tracing: Account bottom half disabled sections.
Disabling only bottom halves via local_bh_disable() disables also
preemption but this remains invisible to tracing. On a CONFIG_PREEMPT
kernel one might wonder why there is no scheduling happening despite the
N flag in the trace. The reason might be the a rcu_read_lock_bh()
section.
Add a 'b' to the tracing output if in task context with disabled bottom
halves.
Link: https://lkml.kernel.org/r/YbcbtdtC/bjCKo57@linutronix.de
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/trace_output.c')
-rw-r--r-- | kernel/trace/trace_output.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c index 3547e7176ff7..8aa493d25c73 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c @@ -445,14 +445,18 @@ int trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry) char irqs_off; int hardirq; int softirq; + int bh_off; int nmi; nmi = entry->flags & TRACE_FLAG_NMI; hardirq = entry->flags & TRACE_FLAG_HARDIRQ; softirq = entry->flags & TRACE_FLAG_SOFTIRQ; + bh_off = entry->flags & TRACE_FLAG_BH_OFF; irqs_off = + (entry->flags & TRACE_FLAG_IRQS_OFF && bh_off) ? 'D' : (entry->flags & TRACE_FLAG_IRQS_OFF) ? 'd' : + bh_off ? 'b' : (entry->flags & TRACE_FLAG_IRQS_NOSUPPORT) ? 'X' : '.'; |