静默地丢弃对mmap区域的写入

问题描述 投票:0回答:1

我有一个Linux设备驱动程序,允许用户空间进程mmap()设备的MMIO空间的某些区域进行写入。设备可能在某个时候决定撤销对该区域的访问,并在发生这种情况时通知驱动程序。驱动程序(异步)通知用户空间进程停止使用此区域。

我希望驱动程序立即删除PTE以进行此映射,以便它们可以返回到设备控制,但是,用户空间进程可能仍在完成写入。我想简单地丢弃这些写法。用户不需要知道哪些写入到设备以及哪些写入被丢弃。在切换可以无害地丢弃对该区域的写入的PTE之后,驱动程序的故障处理程序可以做什么?

linux-kernel linux-device-driver mmap
1个回答
0
投票

要使用户空间进程取得进展,PTE需要最终指向可写页面。

如果您不希望它写入您的设备MMIO区域,这意味着您需要为写入分配一个正常内存页面,就像故障处理程序对匿名VMA所做的那样。

或者,您可以在发生此吊销事件时让您的用户空间任务获取SIGBUS,并指定使用此设备的任务应该发生这种情况,并且必须安装使用SIGBUS取消其尝试写入设备的longjmp()处理程序。这种方法的缺点 - 除了它转移到用户空间的额外复杂性 - 是因为它使得你的设备难以从库中使用,因为信号处理程序是进程全局状态。

© www.soinside.com 2019 - 2024. All rights reserved.