|
@@ -700,7 +700,9 @@ void rcu_check_callbacks(int cpu, int user)
|
|
|
static void rcu_init_percpu_data(int cpu, struct rcu_ctrlblk *rcp,
|
|
|
struct rcu_data *rdp)
|
|
|
{
|
|
|
- spin_lock(&rcp->lock);
|
|
|
+ long flags;
|
|
|
+
|
|
|
+ spin_lock_irqsave(&rcp->lock, flags);
|
|
|
memset(rdp, 0, sizeof(*rdp));
|
|
|
rdp->nxttail[0] = rdp->nxttail[1] = rdp->nxttail[2] = &rdp->nxtlist;
|
|
|
rdp->donetail = &rdp->donelist;
|
|
@@ -708,7 +710,7 @@ static void rcu_init_percpu_data(int cpu, struct rcu_ctrlblk *rcp,
|
|
|
rdp->qs_pending = 0;
|
|
|
rdp->cpu = cpu;
|
|
|
rdp->blimit = blimit;
|
|
|
- spin_unlock(&rcp->lock);
|
|
|
+ spin_unlock_irqrestore(&rcp->lock, flags);
|
|
|
}
|
|
|
|
|
|
static void __cpuinit rcu_online_cpu(int cpu)
|