do_page_fault()是处理缺页异常的入口,一直感兴趣这是怎样被调用到的。今天在handle_mm_fault()里面加了一个BUG()专门看调用栈,发现并不复杂。
既然是缺页,肯定是发端于预取数据异常,是由中断发起的。这要追溯到entry-armv.S里对预取数据中断的处理,最终会调用到do_PrefetchAbort(),这个函数在arch/arm/mm/fault.c里定义,在其中通过钩子的形式直接就调了do_page_fault():
if (!inf->fn(addr, ifsr | FSR_LNX_PF, regs))return;
本文详细解析了do_page_fault()函数的调用路径,从预取数据异常出发,通过中断处理最终调用do_PrefetchAbort(),进而直接触发do_page_fault()。了解这一过程对于深入理解内核级内存管理至关重要。
1794

被折叠的 条评论
为什么被折叠?



