页面表走进armv7 linux by S / W导致哪个版本的页面表ARM PTE或Linux PTE

时间:2015-10-07 13:54:18

标签: linux-kernel arm mmu

我的问题是在handle_mm_fault函数或任何S / W页表行走。

pgd = pgd_offset(mm,address);
pud = pud_offset (pgd,address);
pmd = pmd_offset (pud,address);
pte = pte_offset_map(pmd,address);

最终计算的pte是ARM还是LINUX版本?

在armv7中支持2级页面表;在第一级,每4个字节的4096个条目具有第二级的地址。第二级每4个字节有256个条目。 Linux已经调整了页表,每个8字节有2048个条目,换句话说,有两个指向第二级页表的指针,其中有512个条目连续放置。 Linux PTE存储在这些512 ARM PTE下面。

所以我理解S / W中的页表遍历只会导致ARM PTE,但这不正确Linux总是在Linux PTE上运行?

请告诉我哪里错了?

我得到了答案。  据我所知,所有这些宏只会导致Linux PTE,因为4kb大小的L2级页表和从第0个偏移的linux pte0开始和第1024个偏移linux pte1开始。在计算pte_index时,它会屏蔽PMD值的低12位,因此PMD将始终指向页面的开头并存储Linux PTE。

1 个答案:

答案 0 :(得分:0)

我得到了答案。据我所知,所有这些宏只会导致Linux PTE,因为4kb大小的L2级页表和从第0个偏移的linux pte0开始和第1024个偏移linux pte1开始。在计算pte_index时,它会屏蔽PMD值的低12位,因此PMD将始终指向页面的开头并存储Linux PTE。