Commit ae778869 authored by Paul E. McKenney's avatar Paul E. McKenney Committed by Ingo Molnar

rcupreempt: fix hibernate/resume in presence of PREEMPT_RCU and hotplug

This fixes a oops encountered when doing hibernate/resume in presence of
PREEMPT_RCU.

The problem was that the code failed to disable preemption when
accessing a per-CPU variable.  This is OK when called from code that
already has preemption disabled, but such is not the case from the
suspend/resume code path.
Reported-by: default avatarDave Young <hidave.darkstar@gmail.com>
Tested-by: default avatarDave Young <hidave.darkstar@gmail.com>
Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 076d84bb
...@@ -918,8 +918,9 @@ void rcu_offline_cpu(int cpu) ...@@ -918,8 +918,9 @@ void rcu_offline_cpu(int cpu)
* fix. * fix.
*/ */
local_irq_save(flags);
rdp = RCU_DATA_ME(); rdp = RCU_DATA_ME();
spin_lock_irqsave(&rdp->lock, flags); spin_lock(&rdp->lock);
*rdp->nexttail = list; *rdp->nexttail = list;
if (list) if (list)
rdp->nexttail = tail; rdp->nexttail = tail;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment