Messages in this thread | | | Date | Wed, 01 Jun 2005 15:20:38 -0400 | From | john cooper <> | Subject | Re: RT and Cascade interrupts |
| |
Trond Myklebust wrote: > on den 01.06.2005 Klokka 14:05 (-0400) skreiv john cooper: >>I don't see how this would imply a kernel/timer.c >>problem. It also appears this wouldn't be causing >>the timer cascade corruption I've seen as the >>end result is deleting an already dequeued timer >>which is safe here. > > > If timer->base==NULL, then del_timer() returns 0 (as you correctly state > above). What you appear to be missing is that this will trigger a call > to del_timer_sync() inside del_singleshot_timer_sync().
You might have missed in my earlier mail as this is a not an MP kernel ie: !CONFIG_SMP The synchronous timer delete primitives don't exist in this configuration:
include/linux/timer.h:
#ifdef CONFIG_SMP extern int del_timer_sync(struct timer_list *timer); extern int del_singleshot_timer_sync(struct timer_list *timer); #else # define del_timer_sync(t) del_timer(t) # define del_singleshot_timer_sync(t) del_timer(t) #endif
BTW, I don't know if you happened on the mail I sent yesterday. It details rpc_run_timer() waking up an application task blocked in call_transmit(). The app task preempts ksoftirqd and eventually does a __rpc_sleep_on()/__mod_timer() which requeues the timer in the cascade. When ksoftirqd/rpc_run_timer() resumes RPC_TASK_HAS_TIMER is unconditionally cleared however the timer is queued in the cascade. This appears to be at least one cause of the timer cascade corruption I've seen.
-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/
| |