sched/idle: Fix arch_cpu_idle() vs tracing
We call arch_cpu_idle() with RCU disabled, but then use local_irq_{en,dis}able(), which invokes tracing, which relies on RCU. Switch all arch_cpu_idle() implementations to use raw_local_irq_{en,dis}able() and carefully manage the lockdep,rcu,tracing state like we do in entry. (XXX: we really should change arch_cpu_idle() to not return with interrupts enabled) Reported-by:Sven Schnelle <svens@linux.ibm.com> Signed-off-by:
Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by:
Mark Rutland <mark.rutland@arm.com> Tested-by:
Mark Rutland <mark.rutland@arm.com> Link: https://lkml.kernel.org/r/20201120114925.594122626@infradead.org
Showing
- arch/alpha/kernel/process.c 1 addition, 1 deletionarch/alpha/kernel/process.c
- arch/arm/kernel/process.c 1 addition, 1 deletionarch/arm/kernel/process.c
- arch/arm64/kernel/process.c 1 addition, 1 deletionarch/arm64/kernel/process.c
- arch/csky/kernel/process.c 1 addition, 1 deletionarch/csky/kernel/process.c
- arch/h8300/kernel/process.c 1 addition, 1 deletionarch/h8300/kernel/process.c
- arch/hexagon/kernel/process.c 1 addition, 1 deletionarch/hexagon/kernel/process.c
- arch/ia64/kernel/process.c 1 addition, 1 deletionarch/ia64/kernel/process.c
- arch/microblaze/kernel/process.c 1 addition, 1 deletionarch/microblaze/kernel/process.c
- arch/mips/kernel/idle.c 6 additions, 6 deletionsarch/mips/kernel/idle.c
- arch/nios2/kernel/process.c 1 addition, 1 deletionarch/nios2/kernel/process.c
- arch/openrisc/kernel/process.c 1 addition, 1 deletionarch/openrisc/kernel/process.c
- arch/parisc/kernel/process.c 1 addition, 1 deletionarch/parisc/kernel/process.c
- arch/powerpc/kernel/idle.c 2 additions, 2 deletionsarch/powerpc/kernel/idle.c
- arch/riscv/kernel/process.c 1 addition, 1 deletionarch/riscv/kernel/process.c
- arch/s390/kernel/idle.c 3 additions, 3 deletionsarch/s390/kernel/idle.c
- arch/sh/kernel/idle.c 1 addition, 1 deletionarch/sh/kernel/idle.c
- arch/sparc/kernel/leon_pmc.c 2 additions, 2 deletionsarch/sparc/kernel/leon_pmc.c
- arch/sparc/kernel/process_32.c 1 addition, 1 deletionarch/sparc/kernel/process_32.c
- arch/sparc/kernel/process_64.c 2 additions, 2 deletionsarch/sparc/kernel/process_64.c
- arch/um/kernel/process.c 1 addition, 1 deletionarch/um/kernel/process.c
Loading
Please register or sign in to comment