get_user_pages()通过系统调用来固定内存

时间:2016-11-08 11:49:39

标签: linux-kernel

根据内核对gup api的内联评论:

  

"这不保证页面存在于用户映射中   当get_user_pages返回时,甚至可能完全   在某些情况下有不同的页面(例如,如果mmapped pagecache已经   失效,随后再次出现故障)。但它确实保证   页面不会被完全释放。而且主要是来电者   注意页面包含有时有效的数据   时间。通常,IO或类似操作无法保证   任何更强大的东西,因为锁不能保持在系统调用上   。边界"

我假设在返回用户空间之前我必须put_page()。但我也发现系统调用中的ib_umem.c get_user_pages()和另一个系统调用中的put_page()。我想在我的驱动程序中也这样做。是这样吗?

感谢。

2016年11月10日更新: 好的,现在我知道原因了。 gup可以固定页面,这样它就不会被释放。但它无法锁定vma以指向同一页面。 ib_umem没有解决问题,ib_umem_get()和ib_umem_release()应该保持在同一系统调用范围内。

我还找到了一些解决方案,例如http://lwn.net/Articles/600502/。它试图引入VM_PINPED标志来固定VMA。但它没有人对它感兴趣。为什么?

0 个答案:

没有答案