• Oleg Nesterov's avatar
    [PATCH] set EXIT_DEAD state in do_exit(), not in schedule() · 29b88492
    Oleg Nesterov authored
    schedule() checks PF_DEAD on every context switch and sets ->state = EXIT_DEAD
    to ensure that the exiting task will be deactivated.  Note that this EXIT_DEAD
    is in fact a "random" value, we can use any bit except normal TASK_XXX values.
    
    It is better to set this state in do_exit() along with PF_DEAD flag and remove
    that check in schedule().
    
    We are safe wrt concurrent try_to_wake_up() (for example ptrace, tkill), it
    can not change task's ->state: the 'state' argument of try_to_wake_up() can't
    have EXIT_DEAD bit.  And in case when try_to_wake_up() sees a stale value of
    ->state == TASK_RUNNING it will do nothing.
    Signed-off-by: default avatarOleg Nesterov <oleg@tv-sign.ru>
    Cc: Ingo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    29b88492
sched.c 173 KB