哪里可以找到vma-> fault()?

时间:2015-05-11 23:23:13

标签: linux-kernel memory

我理解vma->fault()将采用vmavmf两个参数。但我不确定vma->fault()内部会做什么,因为我无法在vm_area_struct->vm_ops->fault()找到有关此字段初始化的代码或文档。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您正在寻找实施vma->fault(),该实施正在__do_fault()函数mm/memory.c中执行:

ret = vma->vm_ops->fault(vma, &vmf);

TL; DR

简答:special_mapping_fault()函数设置为.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实施的一部分,因此与您的案例无关。

对于其他两种情况,您都可以看到special_mapping_fault()函数正在使用.fault回调。