Linux kernel 正在尝试使用挂起的DMA操作锁定页面

Linux kernel 正在尝试使用挂起的DMA操作锁定页面,linux-kernel,linux-device-driver,dma,Linux Kernel,Linux Device Driver,Dma,这是关于Linux(与驱动程序相关)的问题。假设我们有一些硬件,能够进行大型DMA访问(多兆字节读取或写入,您可能会想到CUDA卡或网卡)。要向设备传输或从设备传输的数据分配在用户空间中,并放置在用户空间中 所以,我认为正确的方法是mlock()DMA将访问的内存范围。然后用户进程将调用我的驱动程序来启动DMA传输。传输启动后,我的用户空间进程仍在其他线程中工作 一段时间后,当我相信数据被传输时,我想从用户空间线程执行munlock()内存范围 这合法吗?如果在实际DMA传输结束之前调用munl

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

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

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

这合法吗?如果在实际DMA传输结束之前调用
munlock()
,会怎么样

这是成功还是失败?或者在DMA传输完成之前它是否会阻塞


PS:来自Zan Lynx,ISO的id13422。

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


如果内存已锁定,驱动程序仍需获取对页面的附加引用,以防止过早解锁。

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

如果内存已锁定,则驱动程序仍需获取对页面的附加引用,以防止过早解锁