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) preempt_check_resched(); calls schedule(), or long interrupt happens. timer reschedules itself, __run_timers() exits. 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 goto del_again; // not taken del_timer_sync() returns timer runs. No? Oleg. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/