最近发现一处spinlock误用的案例,大概情况是这样的:
有一个链表,中断程序和内核线程都需要去访问,代码中采用了spinlock
对链表进行保护,使用的下面的函数,
spin_lock()
spin_unlock()
导致现象是,在繁忙操作这个表的时候,随机出现kernel bug的提示,然后系统死掉,定位为spinlock使用有误,原因是上述的函数只是禁止了抢占,但是没有关中断,所以正确的应该是使用下面的函数代替,
spin_lock_irqsave()
spin_unlock_irqrestore()
posted on 2007-06-16 00:08
hzb 阅读(380)
评论(0) 编辑 收藏 引用