]> err.no Git - linux-2.6/blobdiff - kernel/rcupreempt.c
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux...
[linux-2.6] / kernel / rcupreempt.c
index c7c52096df48f180d08c133476a9464447d956b9..e9517014b57c100af5926165d2131992f0589401 100644 (file)
@@ -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;
@@ -951,9 +952,11 @@ static void rcu_process_callbacks(struct softirq_action *unused)
 {
        unsigned long flags;
        struct rcu_head *next, *list;
-       struct rcu_data *rdp = RCU_DATA_ME();
+       struct rcu_data *rdp;
 
-       spin_lock_irqsave(&rdp->lock, flags);
+       local_irq_save(flags);
+       rdp = RCU_DATA_ME();
+       spin_lock(&rdp->lock);
        list = rdp->donelist;
        if (list == NULL) {
                spin_unlock_irqrestore(&rdp->lock, flags);