From: Paul E. McKenney Date: Thu, 28 Feb 2008 00:21:10 +0000 (-0800) Subject: rcupreempt: fix hibernate/resume in presence of PREEMPT_RCU and hotplug X-Git-Tag: v2.6.25-rc4~130 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=ae778869ae4549628b9e83efe958c3aaa63ed1b9;p=linux-2.6-omap-h63xx.git 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: Dave Young Tested-by: Dave Young Signed-off-by: Paul E. McKenney Signed-off-by: Ingo Molnar --- diff --git a/kernel/rcupreempt.c b/kernel/rcupreempt.c index c7c52096df4..845abcd472b 100644 --- a/kernel/rcupreempt.c +++ b/kernel/rcupreempt.c @@ -918,8 +918,9 @@ void rcu_offline_cpu(int cpu) * fix. */ + local_irq_save(flags); rdp = RCU_DATA_ME(); - spin_lock_irqsave(&rdp->lock, flags); + spin_lock(&rdp->lock); *rdp->nexttail = list; if (list) rdp->nexttail = tail;