- 论坛徽章:
- 0
|
本帖最后由 omycle 于 2012-11-20 10:00 编辑
回复 3# leslielg
恩。对。flush_pmd_entry,的目的是:“Clean data or unified cache line by MVA to PoC”.
在cache中,每个cache line是32字节。而一个pmd entry是4字节。因此,对于两个pmd(pmd 1, pmd2),刷pmd2,Pmd1 没必要重复刷新了。
这里,可能会问:pmd1和pmd2如果不在同一个cache line中,怎么办? 一个页表所占的页是4KB,因此,如果成对刷页表项的话,这个页表项对一定落在同一个cache line中。
- 463 static inline void flush_pmd_entry(void *pmd)
- 464 {
- 465 const unsigned int __tlb_flag = __cpu_tlb_flags;
- 466
- 467 tlb_op(TLB_DCLEAN, "c7, c10, 1 @ flush_pmd", pmd);
- 468 tlb_l2_op(TLB_L2CLEAN_FR, "c15, c9, 1 @ L2 flush_pmd", pmd);
- 469
- 470 if (tlb_flag(TLB_WB))
- 471 dsb();
- 472 }
复制代码 以ARM V7为例467行做的事情是:“mcr p15,0,pmd,c7,c10,1”
468行是空操作。 |
|