我在userfaultfd的文档中看到了
https://manpages.debian.org/testing/manpages-dev/userfaultfd.2.en.html http://man7.org/linux/man-pages/man2/ioctl_userfaultfd.2.html
userfaultfd将从内核4.11开始支持共享映射。但是,文档仍然看起来很模糊,因为我仍然想知道这些包括支持文件支持的mmap(也可以是MAP_SHARED)?
答案 0 :(得分:3)
要明确回答,由于信息不在手册页中,我们可以看到来源。
尝试注册具有地址范围的userfaultfd对象必须check该范围是否为"兼容":
…
/* check not compatible vmas */
ret = -EINVAL;
if (!vma_can_userfault(cur))
goto out_unlock;
而definition of compatibility是:
static inline bool vma_can_userfault(struct vm_area_struct *vma)
{
return vma_is_anonymous(vma) || is_vm_hugetlb_page(vma) || vma_is_shmem(vma);
}
因此,只有匿名映射(vma_is_anonymous
)或映射:
shmget
)映射兼容generic_file_mmap
)共享的文件支持范围也是兼容的