【发布时间】:2018-08-02 13:41:42
【问题描述】:
我在 Linux 内核驱动程序中使用 get_user_pages 来固定内存以用于 [硬件] DMA。这一切似乎工作正常 - 但我很难证明“固定”正在做正确的事情。
当我在执行get_user_pages 之后检查物理页面上的标志时 - 页面不会出现“锁定”(正如人们可能认为的那样)。事实上,我认为其他“活动”页面的标志与我通过get_user_pages“固定”的那些标志之间没有区别。
我看到的 only 区别是 get_user_pages 在页面上采用了 refcount。所以我想我的问题是 - 持有这个引用 单独 是否足以保证这个页面永远不会被换出、移动,或者我的用户空间的 vaddr 仍然/总是引用相同的底层页面?
我能找到的所有驱动程序源似乎都使用这种机制,并且文档似乎表明这是正确的方法 - 但我很难“证明”这会给我正确、可靠、预期的行为.
【问题讨论】:
标签: c memory-management linux-kernel linux-device-driver