Re: [patch] del_timer_sync scalability patch
From: Christoph Lameter
Date: Mon Mar 14 2005 - 14:48:10 EST
On Sun, 13 Mar 2005, Oleg Nesterov wrote:
> I suspect that del_timer_sync() in its current form is racy.
> CPU 0 CPU 1
> __run_timers() sets timer->base = NULL
> del_timer_sync() starts, calls del_timer(), it returns
> because timer->base == NULL.
> waits until the run is complete:
> while (base->running_timer == timer)
> calls schedule(), or long interrupt happens.
> timer reschedules itself, __run_timers()
> base->running_timer == NULL, end of loop.
> next timer interrupt, __run_timers() picks
> this timer again, sets timer->base = NULL
> if (timer_pending(timer)) // no, timer->base == NULL
timer->base is != NULL because the timer has rescheduled itself.
__mod_timer sets timer->bBase
> goto del_again; // not taken
Yes it is taken!
> del_timer_sync() returns
> timer runs.
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/