我有一个创建计时器的 Linux
模块,其中一些计时器可能会在它们的处理程序函数期间再次添加它们自己。
在其他一些情况下,使用 del_timer_sync()
删除计时器(可能在它关闭之前)。
在这种情况下,我是否需要在下一个 add_timer(
) 之前对结构再次调用 init_timer()
还是只是浪费(宝贵的) 中断延迟?
最佳答案
为了回答我自己的问题,我相信如果我打算再次访问该结构,我确实需要在任何 del_timer() 或 del_timer_sync() 之后对我的结构进行 init_timer() - 例如,在执行 timer_pending() 或其他操作时在模块清理期间。
我认为在编写可能重用定时器的内核模块时,最好的做法是:
static struct timer_list my_timer;
...
static void remove_my_timer(void)
{
if (timer_pending(&my_timer))
{
del_timer_sync(&my_timer);
init_timer(&my_timer);
}
}
static void arm_my_timer(...)
{
remove_my_timer();
my_timer.expires = ...;
my_timer.data = ...;
my_timer.function = ...;
add_timer(&my_timer);
}
...
int __init init_my_device(void)
{
...
init_timer(&my_timer);
...
}
void __exit cleanup_my_device(void)
{
...
remove_my_timer();
...
}
希望以后能对其他人有所帮助。
关于linux - 是否需要在 del_timer() 之后再次调用 init_timer(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19979276/