398f74569c
John Stultz reports an RCU splat on boot with ARM ipi trace
events enabled.
===============================
[ INFO: suspicious RCU usage. ]
4.1.0-rc7-00033-gb5bed2f #153 Not tainted
-------------------------------
include/trace/events/ipi.h:68 suspicious rcu_dereference_check() usage!
other info that might help us debug this:
RCU used illegally from idle CPU!
rcu_scheduler_active = 1, debug_locks = 0
RCU used illegally from extended quiescent state!
no locks held by swapper/0/0.
stack backtrace:
CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.1.0-rc7-00033-gb5bed2f #153
Hardware name: Qualcomm (Flattened Device Tree)
[<c0216b08>] (unwind_backtrace) from [<c02136e8>] (show_stack+0x10/0x14)
[<c02136e8>] (show_stack) from [<c075e678>] (dump_stack+0x70/0xbc)
[<c075e678>] (dump_stack) from [<c0215a80>] (handle_IPI+0x428/0x604)
[<c0215a80>] (handle_IPI) from [<c020942c>] (gic_handle_irq+0x54/0x5c)
[<c020942c>] (gic_handle_irq) from [<c0766604>] (__irq_svc+0x44/0x7c)
Exception stack(0xc09f3f48 to 0xc09f3f90)
3f40: 00000001 00000001 00000000 c09f73b8 c09f4528 c0a5de9c
3f60: c076b4f0 00000000 00000000 c09ef108 c0a5cec1 00000001 00000000 c09f3f90
3f80: c026bf60 c0210ab8 20000113 ffffffff
[<c0766604>] (__irq_svc) from [<c0210ab8>] (arch_cpu_idle+0x20/0x3c)
[<c0210ab8>] (arch_cpu_idle) from [<c02647f0>] (cpu_startup_entry+0x2c0/0x5dc)
[<c02647f0>] (cpu_startup_entry) from [<c099bc1c>] (start_kernel+0x358/0x3c4)
[<c099bc1c>] (start_kernel) from [<8020807c>] (0x8020807c)
At this point in the IPI handling path we haven't called
irq_enter() yet, so RCU doesn't know that we're about to exit
idle and properly warns that we're using RCU from an idle CPU.
Use trace_ipi_entry_rcuidle() instead of trace_ipi_entry() so
that RCU is informed about our exit from idle.
Fixes:
|
||
---|---|---|
.. | ||
.gitignore | ||
arch_timer.c | ||
armksyms.c | ||
asm-offsets.c | ||
atags.h | ||
atags_compat.c | ||
atags_parse.c | ||
atags_proc.c | ||
bios32.c | ||
calls.S | ||
cpuidle.c | ||
crash_dump.c | ||
debug.S | ||
devtree.c | ||
dma-isa.c | ||
dma.c | ||
early_printk.c | ||
elf.c | ||
entry-armv.S | ||
entry-common.S | ||
entry-ftrace.S | ||
entry-header.S | ||
entry-v7m.S | ||
fiq.c | ||
fiqasm.S | ||
ftrace.c | ||
head-common.S | ||
head-nommu.S | ||
head.S | ||
hibernate.c | ||
hw_breakpoint.c | ||
hyp-stub.S | ||
insn.c | ||
io.c | ||
irq.c | ||
isa.c | ||
iwmmxt.S | ||
jump_label.c | ||
kgdb.c | ||
machine_kexec.c | ||
Makefile | ||
module.c | ||
opcodes.c | ||
patch.c | ||
perf_callchain.c | ||
perf_event.c | ||
perf_event_cpu.c | ||
perf_event_v6.c | ||
perf_event_v7.c | ||
perf_event_xscale.c | ||
perf_regs.c | ||
pj4-cp0.c | ||
process.c | ||
psci-call.S | ||
psci.c | ||
psci_smp.c | ||
ptrace.c | ||
reboot.c | ||
reboot.h | ||
relocate_kernel.S | ||
return_address.c | ||
setup.c | ||
signal.c | ||
sigreturn_codes.S | ||
sleep.S | ||
smp.c | ||
smp_scu.c | ||
smp_tlb.c | ||
smp_twd.c | ||
stacktrace.c | ||
suspend.c | ||
swp_emulate.c | ||
sys_arm.c | ||
sys_oabi-compat.c | ||
tcm.c | ||
thumbee.c | ||
time.c | ||
topology.c | ||
traps.c | ||
unwind.c | ||
v7m.c | ||
vdso.c | ||
vmlinux.lds.S | ||
xscale-cp0.c |