【发布时间】:2015-09-10 05:51:27
【问题描述】:
我想释放一个嵌入了 spin_lock 的结构。
场景如下:
我有两个功能
f1 () {
*****************
spin_lock_irqsave(&my_obj_ptr->my_lock, flags)
....
.... ........................................ here f2 is called
spin_lock_irqstore(&my_obj_ptr->my_lock, flags)
*******************
kfree(my_obj_ptr)
}
f2 与 f1 内容相似。
当 f2 被调用 my_lock 正在使用时,f2 必须忙于等待。 但是,当 f2 进入临界区时,my_obj_ptr 是空闲的。 所以内核崩溃...
我现在想的是在 struct my_obj 中添加一个 ref_count 变量
在 spin_lock_irqsave => ref_count++ 之前
在 spin_lock_irqstore => ref_count--
之后在释放之前,检查 ref_count 变量。
而且现在似乎没有崩溃。
我只是想知道是否会有极端情况,我不考虑? 或者有什么更好的方法来处理这个问题?
任何帮助将不胜感激。
谢谢
【问题讨论】:
标签: c linux linux-kernel locking linux-device-driver