• Huacai Chen's avatar
    LoongArch: Improve hardware page table walker · f93f67d0
    Huacai Chen authored
    LoongArch has similar problems explained in commit 7f0b1bf0
    ("arm64: Fix barriers used for page table modifications"), when hardware
    page table walker (PTW) enabled, speculative accesses may cause spurious
    page fault in kernel space. Theoretically, in order to completely avoid
    spurious page fault we need a "dbar + ibar" pair between the page table
    modifications and the subsequent memory accesses using the corresponding
    virtual address. But "ibar" is too heavy for performace, so we only use
    a "dbar 0b11000" in set_pte(). And let spurious_fault() filter the rest
    rare spurious page faults which should be avoided by "ibar".
    
    Besides, we replace the llsc loop with amo in set_pte() which has better
    performace, and refactor mmu_context.h to 1) avoid any load/store/branch
    instructions between the writing of CSR.ASID & CSR.PGDL, 2) ensure flush
    tlb operation is after updating ASID.
    Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
    f93f67d0
mmu_context.h 4.03 KB