尝试使用挂起的DMA操作来锁定页面

时间:2013-09-21 00:24:09

标签: linux-kernel linux-device-driver dma

这是关于Linux(与驱动程序相关)的问题。假设我们有一些硬件,能够进行大型DMA访问(多兆字节读取或写入,您可以考虑使用CUDA卡或网卡)。要传输到设备/从设备传输的数据在用户空间中分配,并放置在用户空间中。

所以,我认为正确的方法是使用DMA访问的mlock()内存范围。然后用户进程将调用我的驱动程序以启动DMA传输。传输开始后,我的用户空间进程仍在其他线程中工作。

一段时间后,当我相信传输数据时,我想从用户空间线程中做munlock()内存范围。

合法吗?如果在实际DMA传输结束之前调用munlock()该怎么办?

munlock()会成功还是失败?或者它会阻止,直到DMA传输完成?

PS:来自Zan Lynx的question is originally,来自SO的id13422。

1 个答案:

答案 0 :(得分:1)

设备驱动程序负责锁定所有用于DMA的内存,并确保它保持锁定状态。

如果内存已被锁定,则驱动程序仍需要获取对页面的其他引用,以防止它过早解锁。