Blame fix-rcu_deref_check-warning.patch
|
Kyle McMartin |
cfdae02 |
diff --git a/kernel/sched.c b/kernel/sched.c
|
|
Kyle McMartin |
cfdae02 |
index 6d0dbeb..3640c20 100644
|
|
Kyle McMartin |
cfdae02 |
--- a/kernel/sched.c
|
|
Kyle McMartin |
cfdae02 |
+++ b/kernel/sched.c
|
|
Kyle McMartin |
cfdae02 |
@@ -5155,9 +5155,11 @@ void __cpuinit init_idle_bootup_task(struct task_struct *idle)
|
|
Kyle McMartin |
cfdae02 |
void __cpuinit init_idle(struct task_struct *idle, int cpu)
|
|
Kyle McMartin |
cfdae02 |
{
|
|
Kyle McMartin |
cfdae02 |
struct rq *rq = cpu_rq(cpu);
|
|
Kyle McMartin |
cfdae02 |
+ struct rq *oldrq = task_rq(idle);
|
|
Kyle McMartin |
cfdae02 |
unsigned long flags;
|
|
Kyle McMartin |
cfdae02 |
|
|
Kyle McMartin |
cfdae02 |
- raw_spin_lock_irqsave(&rq->lock, flags);
|
|
Kyle McMartin |
cfdae02 |
+ local_irq_save(flags);
|
|
Kyle McMartin |
cfdae02 |
+ double_rq_lock(oldrq, rq);
|
|
Kyle McMartin |
cfdae02 |
|
|
Kyle McMartin |
cfdae02 |
__sched_fork(idle);
|
|
Kyle McMartin |
cfdae02 |
idle->state = TASK_RUNNING;
|
|
Kyle McMartin |
cfdae02 |
@@ -5170,7 +5172,8 @@ void __cpuinit init_idle(struct task_struct *idle, int cpu)
|
|
Kyle McMartin |
cfdae02 |
#if defined(CONFIG_SMP) && defined(__ARCH_WANT_UNLOCKED_CTXSW)
|
|
Kyle McMartin |
cfdae02 |
idle->oncpu = 1;
|
|
Kyle McMartin |
cfdae02 |
#endif
|
|
Kyle McMartin |
cfdae02 |
- raw_spin_unlock_irqrestore(&rq->lock, flags);
|
|
Kyle McMartin |
cfdae02 |
+ double_rq_unlock(oldrq, rq);
|
|
Kyle McMartin |
cfdae02 |
+ local_irq_restore(flags);
|
|
Kyle McMartin |
cfdae02 |
|
|
Kyle McMartin |
cfdae02 |
/* Set the preempt count _outside_ the spinlocks! */
|
|
Kyle McMartin |
cfdae02 |
#if defined(CONFIG_PREEMPT)
|