mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-05-24 10:39:52 +00:00
![]() trace_hardirqs_on_caller() in lockdep.c expects to be called before, not after interrupts are actually enabled. The following comment in kernel/locking/lockdep.c substantiates this claim: " /* * We're enabling irqs and according to our state above irqs weren't * already enabled, yet we find the hardware thinks they are in fact * enabled.. someone messed up their IRQ state tracing. */ " An example can be found in include/linux/irqflags.h: do { trace_hardirqs_on(); raw_local_irq_enable(); } while (0) Without this change, we hit the following DEBUG_LOCKS_WARN_ON. [ 7.760000] ------------[ cut here ]------------ [ 7.760000] WARNING: CPU: 0 PID: 1 at kernel/locking/lockdep.c:2711 resume_user_mode_begin+0x48/0xf0 [ 7.770000] DEBUG_LOCKS_WARN_ON(!irqs_disabled()) [ 7.780000] Modules linked in: [ 7.780000] CPU: 0 PID: 1 Comm: init Not tainted 4.7.0-00003-gc668bb9-dirty #366 [ 7.790000] [ 7.790000] Stack Trace: [ 7.790000] arc_unwind_core.constprop.1+0xa4/0x118 [ 7.800000] warn_slowpath_fmt+0x72/0x158 [ 7.800000] resume_user_mode_begin+0x48/0xf0 [ 7.810000] ---[ end trace 6f6a7a8fae20d2f0 ]--- Signed-off-by: Daniel Mentz <danielmentz@google.com> Cc: <stable@vger.kernel.org> Signed-off-by: Vineet Gupta <vgupta@synopsys.com> |
||
---|---|---|
.. | ||
arcregs.h | ||
asm-offsets.h | ||
atomic.h | ||
barrier.h | ||
bitops.h | ||
bug.h | ||
cache.h | ||
cacheflush.h | ||
checksum.h | ||
cmpxchg.h | ||
current.h | ||
delay.h | ||
disasm.h | ||
dma-mapping.h | ||
dma.h | ||
elf.h | ||
entry-arcv2.h | ||
entry-compact.h | ||
entry.h | ||
exec.h | ||
fb.h | ||
futex.h | ||
highmem.h | ||
hugepage.h | ||
io.h | ||
irq.h | ||
irqflags-arcv2.h | ||
irqflags-compact.h | ||
irqflags.h | ||
Kbuild | ||
kdebug.h | ||
kgdb.h | ||
kmap_types.h | ||
kprobes.h | ||
linkage.h | ||
mach_desc.h | ||
mcip.h | ||
mmu.h | ||
mmu_context.h | ||
mmzone.h | ||
module.h | ||
mutex.h | ||
page.h | ||
pci.h | ||
perf_event.h | ||
pgalloc.h | ||
pgtable.h | ||
processor.h | ||
ptrace.h | ||
sections.h | ||
segment.h | ||
serial.h | ||
setup.h | ||
shmparam.h | ||
smp.h | ||
spinlock.h | ||
spinlock_types.h | ||
stacktrace.h | ||
string.h | ||
switch_to.h | ||
syscall.h | ||
syscalls.h | ||
thread_info.h | ||
timex.h | ||
tlb-mmu1.h | ||
tlb.h | ||
tlbflush.h | ||
uaccess.h | ||
unaligned.h | ||
unwind.h |