Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc3ce517 authored by Paul E. McKenney's avatar Paul E. McKenney Committed by Ingo Molnar
Browse files

rcu: Start RCU kthreads in TASK_INTERRUPTIBLE state



Upon creation, kthreads are in TASK_UNINTERRUPTIBLE state, which can
result in softlockup warnings.  Because some of RCU's kthreads can
legitimately be idle indefinitely, start them in TASK_INTERRUPTIBLE
state in order to avoid those warnings.

Suggested-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: default avatarPaul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tested-by: default avatarYinghai Lu <yinghai@kernel.org>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 08bca60a
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -1648,6 +1648,7 @@ static int __cpuinit rcu_spawn_one_cpu_kthread(int cpu)
	if (IS_ERR(t))
	if (IS_ERR(t))
		return PTR_ERR(t);
		return PTR_ERR(t);
	kthread_bind(t, cpu);
	kthread_bind(t, cpu);
	set_task_state(t, TASK_INTERRUPTIBLE);
	per_cpu(rcu_cpu_kthread_cpu, cpu) = cpu;
	per_cpu(rcu_cpu_kthread_cpu, cpu) = cpu;
	WARN_ON_ONCE(per_cpu(rcu_cpu_kthread_task, cpu) != NULL);
	WARN_ON_ONCE(per_cpu(rcu_cpu_kthread_task, cpu) != NULL);
	per_cpu(rcu_cpu_kthread_task, cpu) = t;
	per_cpu(rcu_cpu_kthread_task, cpu) = t;
@@ -1755,6 +1756,7 @@ static int __cpuinit rcu_spawn_one_node_kthread(struct rcu_state *rsp,
		if (IS_ERR(t))
		if (IS_ERR(t))
			return PTR_ERR(t);
			return PTR_ERR(t);
		raw_spin_lock_irqsave(&rnp->lock, flags);
		raw_spin_lock_irqsave(&rnp->lock, flags);
		set_task_state(t, TASK_INTERRUPTIBLE);
		rnp->node_kthread_task = t;
		rnp->node_kthread_task = t;
		raw_spin_unlock_irqrestore(&rnp->lock, flags);
		raw_spin_unlock_irqrestore(&rnp->lock, flags);
		sp.sched_priority = 99;
		sp.sched_priority = 99;
+1 −0
Original line number Original line Diff line number Diff line
@@ -1295,6 +1295,7 @@ static int __cpuinit rcu_spawn_one_boost_kthread(struct rcu_state *rsp,
	if (IS_ERR(t))
	if (IS_ERR(t))
		return PTR_ERR(t);
		return PTR_ERR(t);
	raw_spin_lock_irqsave(&rnp->lock, flags);
	raw_spin_lock_irqsave(&rnp->lock, flags);
	set_task_state(t, TASK_INTERRUPTIBLE);
	rnp->boost_kthread_task = t;
	rnp->boost_kthread_task = t;
	raw_spin_unlock_irqrestore(&rnp->lock, flags);
	raw_spin_unlock_irqrestore(&rnp->lock, flags);
	sp.sched_priority = RCU_KTHREAD_PRIO;
	sp.sched_priority = RCU_KTHREAD_PRIO;