Messages in this thread Patch in this message | | | Date | Fri, 06 Jan 2012 21:01:08 +0900 | From | Yasunori Goto <> | Subject | Re: [BUG] TASK_DEAD task is able to be woken up in special condition |
| |
> On Fri, 2012-01-06 at 19:22 +0900, Yasunori Goto wrote: > > I just confirmed booting up on my box, and I would like to get rough agreement > > about this way to solve this issue at first. > > I really don't like it. It makes the ttwu path more complex and more > expensive. ttwu is one of the hottest and more complex paths in the > scheduler, it needs neither more overhead nor more complexity.
Hmmmmm. Ok. > > I'd really much rather put another raw_spin_unlocked_wait() in do_exit() > before we set TASK_DEAD. It probably needs an smp memory barrier too.
Do you mean the following patch?
---
Signed-off-by: Yasunori Goto <y-goto@jp.fujitsu.com>
--- kernel/exit.c | 4 ++++ 1 file changed, 4 insertions(+)
Index: linux-3.2-rc7/kernel/exit.c =================================================================== --- linux-3.2-rc7.orig/kernel/exit.c +++ linux-3.2-rc7/kernel/exit.c @@ -1038,6 +1038,10 @@ NORET_TYPE void do_exit(long code) preempt_disable(); exit_rcu(); + + smp_mb(); + raw_spin_unlock_wait(&tsk->pi_lock); + /* causes final put_task_struct in finish_task_switch(). */ tsk->state = TASK_DEAD; schedule();
-- Yasunori Goto
| |