lkml.org 
[lkml]   [2005]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: RT and Cascade interrupts
    Oleg Nesterov wrote:
    >
    > CPU_0 CPU_1
    >
    > rpc_release_task(task)
    > __run_timers:
    > timer->base = NULL;
    > rpc_delete_timer()
    > if (timer->base)
    > // not taken
    > del_timer_sync();
    >
    > mempool_free(task);
    > timer->function(task):
    > // task already freed/reused
    > __rpc_default_timer(task);

    Ah ok, I was misreading the above. Now I see your point.
    The race if hit loses the synchronization provided by
    del_timer_sync() in my case. Thanks for being persistent.

    The other possibility to fix the original problem within
    the scope of the RPC code was to replace the bit state of
    RPC_TASK_HAS_TIMER with a count so we don't obscure the
    fact the timer was requeued during the preemption window.
    This happens as rpc_run_timer() does an unconditional
    clear_bit(RPC_TASK_HAS_TIMER,..) before returning.

    Another would be to check timer->base/timer_pending()
    in rpc_run_timer() and to omit doing a clear_bit()
    if the timer is found to have been requeued.

    The former has simpler locking requirements but requires
    an rpc_task data structure modification. The latter does
    not and is a bit more intuitive but needs additional
    locking. Both appear to provide a solution though I
    haven't yet attempted either.

    Anyone with more ownership of this code care to comment
    on a preferred fix?

    -john


    --
    john.cooper@timesys.com
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-05-28 19:53    [W:0.023 / U:29.516 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site