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

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回调 长话短说 当试图找到这样的东西时,不应该低估简单

我知道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回调

长话短说 当试图找到这样的东西时,不应该低估简单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回调