linux-stable/arch
Frederic Weisbecker e37e112de3 x86: Enter rcu extended qs after idle notifier call
The idle notifier, called by enter_idle(), enters into rcu read
side critical section but at that time we already switched into
the RCU-idle window (rcu_idle_enter() has been called). And it's
illegal to use rcu_read_lock() in that state.

This results in rcu reporting its bad mood:

[    1.275635] WARNING: at include/linux/rcupdate.h:194 __atomic_notifier_call_chain+0xd2/0x110()
[    1.275635] Hardware name: AMD690VM-FMH
[    1.275635] Modules linked in:
[    1.275635] Pid: 0, comm: swapper Not tainted 3.0.0-rc6+ #252
[    1.275635] Call Trace:
[    1.275635]  [<ffffffff81051c8a>] warn_slowpath_common+0x7a/0xb0
[    1.275635]  [<ffffffff81051cd5>] warn_slowpath_null+0x15/0x20
[    1.275635]  [<ffffffff817d6f22>] __atomic_notifier_call_chain+0xd2/0x110
[    1.275635]  [<ffffffff817d6f71>] atomic_notifier_call_chain+0x11/0x20
[    1.275635]  [<ffffffff810018a0>] enter_idle+0x20/0x30
[    1.275635]  [<ffffffff81001995>] cpu_idle+0xa5/0x110
[    1.275635]  [<ffffffff817a7465>] rest_init+0xe5/0x140
[    1.275635]  [<ffffffff817a73c8>] ? rest_init+0x48/0x140
[    1.275635]  [<ffffffff81cc5ca3>] start_kernel+0x3d1/0x3dc
[    1.275635]  [<ffffffff81cc5321>] x86_64_start_reservations+0x131/0x135
[    1.275635]  [<ffffffff81cc5412>] x86_64_start_kernel+0xed/0xf4
[    1.275635] ---[ end trace a22d306b065d4a66 ]---

Fix this by entering rcu extended quiescent state later, just before
the CPU goes to sleep.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
2011-12-11 10:31:37 -08:00
..
alpha Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
arm nohz: Allow rcu extended quiescent state handling seperately from tick stop 2011-12-11 10:31:36 -08:00
avr32 nohz: Allow rcu extended quiescent state handling seperately from tick stop 2011-12-11 10:31:36 -08:00
blackfin nohz: Allow rcu extended quiescent state handling seperately from tick stop 2011-12-11 10:31:36 -08:00
cris net: Fix references to deleted NET_ETHERNET Kconfig setting. 2011-11-09 19:26:53 -05:00
frv kgdb: follow rename pack_hex_byte() to hex_byte_pack() 2011-10-31 17:30:56 -07:00
h8300 Merge branch 'gpio/next' of git://git.secretlab.ca/git/linux-2.6 2011-10-29 07:27:45 -07:00
hexagon Hexagon: Add basic stacktrace functionality for Hexagon architecture. 2011-11-01 07:34:21 -07:00
ia64 Merge branch 'upstream/xen-settime' of git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen 2011-11-06 20:15:05 -08:00
m32r Merge branch 'trivial' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2011-11-06 18:54:53 -08:00
m68k m68k: Wire up process_vm_{read,write}v 2011-12-06 20:37:58 +01:00
microblaze nohz: Allow rcu extended quiescent state handling seperately from tick stop 2011-12-11 10:31:36 -08:00
mips nohz: Allow rcu extended quiescent state handling seperately from tick stop 2011-12-11 10:31:36 -08:00
mn10300 kgdb: follow rename pack_hex_byte() to hex_byte_pack() 2011-10-31 17:30:56 -07:00
openrisc nohz: Allow rcu extended quiescent state handling seperately from tick stop 2011-12-11 10:31:36 -08:00
parisc parisc: Add export.h to files needing EXPORT_SYMBOL/THIS_MODULE 2011-10-31 19:31:00 -04:00
powerpc nohz: Allow rcu extended quiescent state handling seperately from tick stop 2011-12-11 10:31:36 -08:00
s390 nohz: Allow rcu extended quiescent state handling seperately from tick stop 2011-12-11 10:31:36 -08:00
score score: drop unused Kconfig symbols 2011-10-31 23:39:51 +01:00
sh nohz: Allow rcu extended quiescent state handling seperately from tick stop 2011-12-11 10:31:36 -08:00
sparc nohz: Allow rcu extended quiescent state handling seperately from tick stop 2011-12-11 10:31:36 -08:00
tile nohz: Allow rcu extended quiescent state handling seperately from tick stop 2011-12-11 10:31:36 -08:00
um nohz: Allow rcu extended quiescent state handling seperately from tick stop 2011-12-11 10:31:36 -08:00
unicore32 nohz: Allow rcu extended quiescent state handling seperately from tick stop 2011-12-11 10:31:36 -08:00
x86 x86: Enter rcu extended qs after idle notifier call 2011-12-11 10:31:37 -08:00
xtensa Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2011-10-26 17:15:03 +02:00
.gitignore
Kconfig