求助:timer操作造成死锁问题

honyeah 2007-06-24 08:35:36
请教各位:
编了一个模块,该模块主要作用是利用netfilter框架对某些特定条件的数据包做统计,其中用到定时器:如果一定时间内该类型的数据包没有一个到来就删除相关的统计项,如果有则更新定时器时间。这个检测函数注册在netfilter框架上的HOOK点为IP_PRE_ROUTING,更新定时器的主要代码如下

write_lock_bh(&abc_lock);
......
/*查找表项 ,获取cbth*/
/*更新超时时间*/
//mod_timer(&cbth->tuple.timeout, jiffies+abc_timeout);
if (del_timer_sync(&cbth->tuple.timeout))
{
cbth->tuple.timeout.expires = jiffies+abc_timeout;
add_timer(&cbth->tuple.timeout);
}
write_unlock_bh(&abc_lock);

其中abc_lock是为了对统计表项同步的读写锁,abc_timeout为超时时间
模块加载后不久,就会报错如下:

BUG: soft lockup detected on CPU#1!
softlockup_tick+0x8d/0xb2
update_process_times+0x28/0x5e
tick_sched_timer+0x68/0x177
hrtimer_interrupt+0x13e/0x1c9
smp_apic_timer_interrupt+0x54/0x84
smp_call_function_interrupt+0x3c/0x52
apic_timer_interrupt+0x28/0x30
sys_swapon+0x25b/0xa4b
_spin_lock_irqsave+0x16/0x27
lock_timer_base+0x15/0x2f
try_to_del_timer_sync+0xe/0x4f
del_timer_sync+0xe/0x14
......

使用mod_timer也是一样的情况,只不过错误提示中del_timer_sync的为mod_timer罢了
请问各位到底怎么回事啊,谢谢!
...全文
308 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
hefuhua 2007-06-30
  • 打赏
  • 举报
回复
建议用spin_lock

4,469

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧