diff options
author | Takashi Iwai <tiwai@suse.de> | 2015-10-23 06:57:50 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2015-10-23 06:57:50 +0200 |
commit | 274035751e25ee15a064e43cde7b4e7a9b75d921 (patch) | |
tree | bf5f3f18f14855043324ef02a116532d866e3dac /kernel/sched/core.c | |
parent | 53e597b1d194910bef53ed0632da329fef497904 (diff) | |
parent | a5be88f63eaff1c03774aecd7388015cb87f6b2c (diff) | |
download | op-kernel-dev-274035751e25ee15a064e43cde7b4e7a9b75d921.zip op-kernel-dev-274035751e25ee15a064e43cde7b4e7a9b75d921.tar.gz |
Merge branch 'topic/hw-constraint-single' into for-next
Diffstat (limited to 'kernel/sched/core.c')
-rw-r--r-- | kernel/sched/core.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 6159531..10a8faa 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2517,11 +2517,11 @@ static struct rq *finish_task_switch(struct task_struct *prev) * If a task dies, then it sets TASK_DEAD in tsk->state and calls * schedule one last time. The schedule call will never return, and * the scheduled task must drop that reference. - * The test for TASK_DEAD must occur while the runqueue locks are - * still held, otherwise prev could be scheduled on another cpu, die - * there before we look at prev->state, and then the reference would - * be dropped twice. - * Manfred Spraul <manfred@colorfullife.com> + * + * We must observe prev->state before clearing prev->on_cpu (in + * finish_lock_switch), otherwise a concurrent wakeup can get prev + * running on another CPU and we could rave with its RUNNING -> DEAD + * transition, resulting in a double drop. */ prev_state = prev->state; vtime_task_switch(prev); |