Linux kernel 正在尝试使用挂起的DMA操作锁定页面
这是关于Linux(与驱动程序相关)的问题。假设我们有一些硬件,能够进行大型DMA访问(多兆字节读取或写入,您可能会想到CUDA卡或网卡)。要向设备传输或从设备传输的数据分配在用户空间中,并放置在用户空间中 所以,我认为正确的方法是Linux kernel 正在尝试使用挂起的DMA操作锁定页面,linux-kernel,linux-device-driver,dma,Linux Kernel,Linux Device Driver,Dma,这是关于Linux(与驱动程序相关)的问题。假设我们有一些硬件,能够进行大型DMA访问(多兆字节读取或写入,您可能会想到CUDA卡或网卡)。要向设备传输或从设备传输的数据分配在用户空间中,并放置在用户空间中 所以,我认为正确的方法是mlock()DMA将访问的内存范围。然后用户进程将调用我的驱动程序来启动DMA传输。传输启动后,我的用户空间进程仍在其他线程中工作 一段时间后,当我相信数据被传输时,我想从用户空间线程执行munlock()内存范围 这合法吗?如果在实际DMA传输结束之前调用munl
mlock()
DMA将访问的内存范围。然后用户进程将调用我的驱动程序来启动DMA传输。传输启动后,我的用户空间进程仍在其他线程中工作
一段时间后,当我相信数据被传输时,我想从用户空间线程执行munlock()
内存范围
这合法吗?如果在实际DMA传输结束之前调用munlock()
,会怎么样
这是成功还是失败?或者在DMA传输完成之前它是否会阻塞
PS:来自Zan Lynx,ISO的id13422。设备驱动程序负责锁定所有用于DMA的内存,并确保其保持锁定状态
如果内存已锁定,驱动程序仍需获取对页面的附加引用,以防止过早解锁。设备驱动程序负责锁定所有用于DMA的内存,并确保其保持锁定状态 如果内存已锁定,则驱动程序仍需获取对页面的附加引用,以防止过早解锁