在try_to_del_timer_sync出现之前,如果中断打断了正在执行的timer,那么中断中执行del_timer_sync的时候就会永远忙等下去,2.6.9中具体就是: static inline void __run_timers(tvec_base_t *base) { ...
timer 有两种删除方式,一个是自动删除,就是在执行完timer的回调函数以后自己删除,就是上面的代码中的 list_del(&timer->entry);这一句,另外一种删除方式就是手工删除,就是下面的这种方式,这个函数会等待timer 的base变为NULL,也就是等待timer被彻底删除完毕,如果在非中断中调用,那么没有问题,因为在下面这个函数的...
} 2.6中的实现已经明确说明了该函数不能在中断上下文中调用:“It must not be called from interrupt contexts”,这里的中断上下文也就是定时器的处理函数timer.function,因为执行这个函数是在时钟中断中。 可看到该实现中就是循环调用try_to_del_timer_sync(),就是这个函数使得不能在中断上下文中使用: /* * Thi...
这个函数不能在中断中被调用的原因就是防止删除timer的时候忙等,怎么忙等呢?在try_to_del_timer_sync出现之前,如果中断打断了正在执行的timer,那么中断中执行del_timer_sync的时候就会永远忙等下去,2.6.9中具体就是: static inline void __run_timers(tvec_base_t *base) { ... 本文转自 dog250 51CTO博客,...
本课程对学习Linux方式进行深入的分析发现,linux一开始不能去直接分析各种细节,这样学习效果并不好,而是采用了碎片化的方式来学习,将复杂的linux分解成十大部分:内核模块篇,进程管理篇,进程调度篇,中断机制篇,内存管理篇,内核定时机制篇,同步机制篇,文件系统篇,设备驱动及管理篇,综合分析篇。每一篇都提供了大量的编程...
这个函数不能在中断中被调用的原因就是防止删除timer的时候忙等,怎么忙等呢?在try_to_del_timer_sync出现之前,如果中断打断了正在执行的timer,那么中断中执行del_timer_sync的时候就会永远忙等下去,2.6.9中具体就是: static inline void __run_timers(tvec_base_t *base) { ... ...