Linux kernel 在哪里可以找到vma->fault()?
我知道vma->fault将采用两个参数,即vma和vmf。但我不确定vma->fault本身会做什么,因为我在vm_area_struct->vm_ops->fault中找不到关于此字段初始化的代码或文档。如果我理解正确,您正在寻找实现vma->fault,它正在函数中的mm/memory.c中执行:Linux kernel 在哪里可以找到vma->fault()?,linux-kernel,memory,Linux Kernel,Memory,我知道vma->fault将采用两个参数,即vma和vmf。但我不确定vma->fault本身会做什么,因为我在vm_area_struct->vm_ops->fault中找不到关于此字段初始化的代码或文档。如果我理解正确,您正在寻找实现vma->fault,它正在函数中的mm/memory.c中执行: ret = vma->vm_ops->fault(vma, &vmf); TL;博士 简短回答:函数设置为.fault回调 长话短说 当试图找到这样的东西时,不应该低估简单
ret = vma->vm_ops->fault(vma, &vmf);
TL;博士
简短回答:函数设置为.fault回调
长话短说
当试图找到这样的东西时,不应该低估简单Unix工具(如grep)的功能。知道.fault回调属于内存管理,我们知道应该查看mm/目录。因此,答案如下:
$ grep -sIrHn '\.fault = ' mm/*
接下来是输出:
mm/hugetlb.c:2594: .fault = hugetlb_vm_op_fault,
mm/mmap.c:3001: .fault = special_mapping_fault,
mm/mmap.c:3007: .fault = special_mapping_fault,
进一步调查,我们可以发现mm/hugetlb.c是hugetlb FS implementation的一部分,因此与您的案例无关
对于其他两种情况,您可以看到特殊的_映射_fault函数正在使用as.fault回调