求助:timer操作造成死锁问题
请教各位:
编了一个模块,该模块主要作用是利用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罢了
请问各位到底怎么回事啊,谢谢!