我有一个Linux
创建计时器的模块,其中一些计时器可能会在其处理程序功能期间再次添加自己。
在其他一些情况下,可以使用删除计时器(也许在关闭计时器之前)del_timer_sync()
。
在那种情况下,我是否需要init_timer()
在next之前在结构上再次进行调用,add_timer(
还是浪费(宝贵的)中断等待时间?
为了回答我自己的问题,如果我想再次访问结构,例如在进行timer_pending()或在模块清理过程中进行某些操作,我相信我确实需要在任何del_timer()或del_timer_sync()之后初始化结构体init_timer() 。
我认为在编写可能重复使用计时器的内核模块的情况下,最好的做法是:
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();
...
}
希望以后能对其他人有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句