Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 是否使用mmap_sem调用mmap回调?_Linux Kernel_Linux Device Driver - Fatal编程技术网

Linux kernel 是否使用mmap_sem调用mmap回调?

Linux kernel 是否使用mmap_sem调用mmap回调?,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,当我们在Linux内核模块中访问struct file_operations的mmap回调时,我们是否可以假设在调用回调之前,vma->vm_mm->mm_sem已被保持? 或者,在执行重新映射pfn\u范围之前,我们是否必须显式地调用down\u write(&vma->vm\u mm->mmap\u sem)?mmap文件操作处理程序应该假设mmap锁在被调用时已经被写锁定。mmap文件处理程序是通过call_mmap()通过mmap_region()通过do_mmap()调用的,下面的注释

当我们在Linux内核模块中访问
struct file_operations
mmap
回调时,我们是否可以假设在调用回调之前,
vma->vm_mm->mm_sem
已被保持?
或者,在执行
重新映射pfn\u范围之前,我们是否必须显式地调用
down\u write(&vma->vm\u mm->mmap\u sem)

mmap
文件操作处理程序应该假设mmap锁在被调用时已经被写锁定。
mmap
文件处理程序是通过
call_mmap()
通过
mmap_region()
通过
do_mmap()
调用的,下面的注释出现在“mm/mmap.c”中的
do_mmap()
函数之前:

注意:在Linux内核5.8中,mmap锁已从
mmap\u sem
重命名为
mmap\u lock
。5.7内核中的相应注释为:

/*
 * The caller must hold down_write(&current->mm->mmap_sem).
 */

do_mmap()
通过
do_mmap_pgoff()
(在“include/linux/mm.h”中)通过
vm_mmap_pgoff()
(在“mm/util.c”中)通过
ksys_mmap_pgoff()
(在“mm/mmap.c”中)通过
mmap_pgoff()
系统调用处理程序调用。(注意:从内核版本5.9开始,
do_mmap()
直接从
vm_mmap_pgoff()
调用)mmap锁在
vm_mmap_pgoff()
中被写锁定,我们在
vm_mmap_pgoff
函数中保持锁。@soham很好的观点。我会在回答中提到这一点。
/*
 * The caller must hold down_write(&current->mm->mmap_sem).
 */