2011-07-24 41 views
1

如果我已经为mm_struct持有mmap信号量(阅读),并且我想将一些数据写入页面结构的成员,那么我应该up_read信号量并尝试获取down_write mm_struct还是应该使用单独的锁(它是我创建的结构成员,它是一个列表)。另外,如果我已经拥有一个down_read信号量,并且我调用down_reads同一个信号量的另一个方法,那么根据我的理解,这应该不会造成死锁吗?在内核中的mmap信号量锁定页面

+0

为了清楚起见,这是我编写的一个自定义内核,它向mm_struct添加了成员​​,只有您的代码可以访问? –

+0

@Corey,是的,但成员被添加到页面结构,这就是为什么我想在页面上使用另一个锁。 –

+0

而不是mmap信号量 –

回答

0

我发现的解决方案是down_read不会导致死锁。相反,我使用螺旋锁来维护专有权利来修改列表并更改页面的标志。这使我可以避免在同一页面出现多个错误的问题,还可以让我看到,如果我当前持有该锁,则页错误处理程序可以返回,因为我已经处理了该错误。