• Jinyu Tang's avatar
    riscv: support update_mmu_tlb() · 1b52861f
    Jinyu Tang authored
    Add macro definition to support update_mmu_tlb() for riscv,
    this function is from commit:7df67697 ("mm/memory.c:Update
    local TLB if PTE entry exists").
    
    update_mmu_tlb() is used when a thread notice that other cpu thread
    has handled the fault and changed the PTE. For MIPS, it's worth to
    do that,this cpu thread will trap in tlb fault again otherwise.
    
    For RISCV, it's also better to flush local tlb than do nothing in
    update_mmu_tlb(). There are two kinds of page fault that have
    update_mmu_tlb() inside:
    
    1.page fault which PTE is NOT none, only protection check error,
    like write protection fault. If updata_mmu_tlb() is empty, after
    finsh page fault this time and re-execute, cpu will find address
    but protection checked error in tlb again. So this will cause
    another page fault. PTE in memory is good now,so update_mmu_cache()
    in handle_pte_fault() will be executed. If updata_mmu_tlb() is not
    empty flush local tlb, cpu won't find this address in tlb next time,
    and get entry in physical memory, so it won't cause another page
    fault.
    
    2.page fault which PTE is none or swapped.
    For this case, this cpu thread won't cause another page fault,cpu
    will have tlb miss when re-execute, and get entry in memory
    directly. But "set pte in phycial memory and flush local tlb" is
    pratice in Linux, it's better to flush local tlb if it find entry
    in phycial memory has changed.
    
    Maybe it's same for other ARCH which can't detect PTE changed and
    update it in local tlb automatically.
    Signed-off-by: default avatarJinyu Tang <tjytimi@163.com>
    Reviewed-by: default avatarAndrew Jones <ajones@ventanamicro.com>
    Link: https://lore.kernel.org/r/20221009134503.18783-1-tjytimi@163.comSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    1b52861f
pgtable.h 20.7 KB