del_timer可以在其处理程序运行时返回吗?

时间:2012-08-22 18:05:30

标签: timer linux-kernel

我正在查看一些使用add_timerdel_timer启动和停止计时器的Linux内核模块代码。

有时,实现会在调用del_timer之后立即删除计时器“object”(struct timer_list)。

我想知道这是否安全。请注意,这是一个单处理器实现,禁用SMP(这将强制使用del_timer_sync)。

del_timer_sync实现检查现在是否正在处理定时器,但del_timer不会。在UP系统上,是否可以在没有del_timer知道的情况下处理定时器,即定时器已从挂起的定时器列表中删除并正在处理?

1 个答案:

答案 0 :(得分:1)

UP使事情变得更简单,但我认为答案仍然是“它取决于。”

如果您正在进程上下文中执行del_timer,那么在UP上我认为您可以安全地假设计时器在返回后没有在任何地方运行:计时器从挂起列表中删除并从计时器中断运行,如果该中断开始,它将在允许进程上下文代码继续之前运行完毕。

但是,如果您处于中断上下文中,那么您的中断可能会中断定时器中断,因此定时器可能正在运行中。