v2 PF_DEAD: kill it
Subsystems (3)
PATCH 1/2 v2 PF_DEAD: kill it
PF_DEAD has nothing to do with process state, it is just indication that task_struct should be freed after the last schedule.
After the previous change (->flags & PF_DEAD) <=> (->state == STATE_DEAD), so we can forget about PF_DEAD flag.
Signed-off-by Oleg Nesterov <[email protected]>
include/linux/sched.h renamed from include/linux/sched.h~2_KILL +0 -1
@@ -891,7 +891,6 @@ do { if (atomic_dec_and_test(&(tsk)->usa/* Not implemented yet, only for 486*/ #define PF_STARTING 0x00000002/* being created */ #define PF_EXITING 0x00000004/* getting shut down */ -#define PF_DEAD 0x00000008/* Dead */ #define PF_FORKNOEXEC 0x00000040/* forked but didn't exec */ #define PF_SUPERPRIV 0x00000100/* used super-user privileges */ #define PF_DUMPCORE 0x00000200/* dumped core */
kernel/exit.c renamed from kernel/exit.c~2_KILL +1 -3
@@ -871,10 +871,8 @@ fastcall NORET_TYPE void do_exit(long co tsk->mempolicy =NULL ;#endif -/* PF_DEAD causes final put_task_struct after we schedule. */ +/* ->state == TASK_DEAD causes final put_task_struct after we schedule. */ preempt_disable (); -BUG_ON (tsk->flags &PF_DEAD ); - tsk->flags |=PF_DEAD ; tsk->state =TASK_DEAD ;schedule ();
kernel/sched.c renamed from kernel/sched.c~2_KILL +4 -4
@@ -1615,7 +1615,7 @@ static inline void finish_task_switch(ru __releases(rq->lock) {struct mm_struct *mm = rq->prev_mm; -unsigned long prev_task_flags; +int task_dead; rq->prev_mm =NULL ;
@@ -1630,12 +1630,12 @@ static inline void finish_task_switch(ru* be dropped twice. * Manfred Spraul <[email protected]> */ - prev_task_flags = prev->flags; + task_dead = (prev->state ==TASK_DEAD );finish_arch_switch (prev);finish_lock_switch (rq, prev);if (mm)mmdrop (mm); -if (unlikely (prev_task_flags &PF_DEAD )) +if (unlikely (task_dead))put_task_struct (prev); }
@@ -4711,7 +4711,7 @@ static void migrate_dead(unsigned int deBUG_ON (tsk->exit_state !=EXIT_ZOMBIE && tsk->exit_state !=EXIT_DEAD );/* Cannot have done final schedule yet: would have vanished. */ -BUG_ON (tsk->flags &PF_DEAD ); +BUG_ON (tsk->state ==TASK_DEAD );get_task_struct (tsk);
mm/oom_kill.c renamed from mm/oom_kill.c~2_KILL +1 -1
@@ -163,7 +163,7 @@ static struct task_struct * select_bad_p*/ releasing =test_tsk_thread_flag (p,TIF_MEMDIE ) || p->flags &PF_EXITING ; -if (releasing && !(p->flags &PF_DEAD )) +if (releasing && (p->state !=TASK_DEAD ))return ERR_PTR (-1UL );if (p->flags &PF_SWAPOFF )return p;