On Tue, Jun 23, 2020 at 06:37PM +0200, Peter Zijlstra wrote: > On Tue, Jun 23, 2020 at 06:13:21PM +0200, Ahmed S. Darwish wrote: > > Well, freshly merged code is using it. For example, KCSAN: > > > > => f1bc96210c6a ("kcsan: Make KCSAN compatible with lockdep") > > => kernel/kcsan/report.c: > > > > void kcsan_report(...) > > { > > ... > > /* > > * With TRACE_IRQFLAGS, lockdep's IRQ trace state becomes corrupted if > > * we do not turn off lockdep here; this could happen due to recursion > > * into lockdep via KCSAN if we detect a race in utilities used by > > * lockdep. > > */ > > lockdep_off(); > > ... > > } > > Marco, do you remember what exactly happened there? Because I'm about to > wreck that. That is, I'm going to make TRACE_IRQFLAGS ignore > lockdep_off(). Yeah, I was trying to squash any kind of recursion: lockdep -> other libs -> -> KCSAN -> print report -> dump stack, printk and friends -> lockdep -> other libs -> KCSAN ... Some history: * Initial patch to fix: https://lore.kernel.org/lkml/20200115162512.70807-1-elver@xxxxxxxxxx/ * KCSAN+lockdep+ftrace: https://lore.kernel.org/lkml/20200214211035.209972-1-elver@xxxxxxxxxx/ lockdep now has KCSAN_SANITIZE := n, but we still need to ensure that there are no paths out of lockdep, or the IRQ flags tracing code, that might lead through other libs, through KCSAN, libs used to generate a report, and back to lockdep. I never quite figured out the exact trace that led to corruption, but avoiding any kind of potential for recursion was the only thing that would avoid the check_flags() warnings. Thanks, -- Marco