On 06/25, Jiri Slaby wrote:
>
> From: Oleg Nesterov <[email protected]>
>
> This patch has been added to the 3.12 stable tree. If you have any
> objections, please let us know.

Well, this patch should not hurt, but why? It was a minor cleanup
to improve the "scheduling while atomic" detection.

> ===============
> 
> commit 192301e70af3f6803c6354a464ebfa742da738ae upstream.
> 
> schedule_debug() ignores in_atomic() if prev->exit_state != 0.
> This is not what we want, ->exit_state is set by exit_notify()
> but we should complain until the task does the last schedule()
> in TASK_DEAD.
> 
> See also 7407251a0e2e "PF_DEAD cleanup", I think this ancient
> commit explains why schedule() had to rely on ->exit_state,
> until that commit exit_notify() disabled preemption and set
> PF_DEAD which was used to detect the exiting task.
> 
> Signed-off-by: Oleg Nesterov <[email protected]>
> Signed-off-by: Peter Zijlstra <[email protected]>
> Cc: David Laight <[email protected]>
> Cc: Geert Uytterhoeven <[email protected]>
> Cc: Tejun Heo <[email protected]>
> Cc: Andrew Morton <[email protected]>
> Cc: Linus Torvalds <[email protected]>
> Link: http://lkml.kernel.org/r/[email protected]
> Signed-off-by: Ingo Molnar <[email protected]>
> Signed-off-by: Jiri Slaby <[email protected]>
> ---
>  kernel/sched/core.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 07039cba59d9..58a54f219c8f 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -2287,10 +2287,10 @@ static inline void schedule_debug(struct task_struct 
> *prev)
>  {
>       /*
>        * Test if we are atomic. Since do_exit() needs to call into
> -      * schedule() atomically, we ignore that path for now.
> -      * Otherwise, whine if we are scheduling when we should not be.
> +      * schedule() atomically, we ignore that path. Otherwise whine
> +      * if we are scheduling when we should not.
>        */
> -     if (unlikely(in_atomic_preempt_off() && !prev->exit_state))
> +     if (unlikely(in_atomic_preempt_off() && prev->state != TASK_DEAD))
>               __schedule_bug(prev);
>       rcu_sleep_check();
>  
> -- 
> 2.0.0
> 

--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to