lkml.org 
[lkml]   [2012]   [Jan]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [BUG] TASK_DEAD task is able to be woken up in special condition
    From
    Date
    On Fri, 2012-01-06 at 21:01 +0900, Yasunori Goto wrote:

    > Do you mean the following patch?

    Yes, something like that. At that point ->state should be TASK_RUNNING
    (since we are after all running). The unlock_wait() will synchronize
    against any in-progress ttwu() while its fast path is a non-atomic
    compare. Any ttwu after this will bail since it will either observe
    TASK_RUNNING or TASK_DEAD, neither are a state it will act upon.

    Now the only question that remains is if we need the full memory barrier
    or if we can get away with less.

    I guess the mb separates the write to ->state (setting TASK_RUNNING)
    from the read of ->pi_lock. The remote CPU must see the TASK_RUNNING,
    and we must see ->pi_lock taken if it is.

    I also can't find anything to 'borrow' a barrier from (well I can for
    mainline, but not for -rt).

    So yes, I guess the below will do, albeit it needs a somewhat
    comprehensive comment explaining its need.

    Oleg, can you agree?

    > ---
    >
    > 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();
    >
    >



    \
     
     \ /
      Last update: 2012-01-06 13:47    [W:0.023 / U:1.804 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site