• Jisheng Zhang's avatar
    riscv: enable MMU_GATHER_RCU_TABLE_FREE for SMP && MMU · 69be3fb1
    Jisheng Zhang authored
    In order to implement fast gup we need to ensure that the page
    table walker is protected from page table pages being freed from
    under it.
    
    riscv situation is more complicated than other architectures: some
    riscv platforms may use IPI to perform TLB shootdown, for example,
    those platforms which support AIA, usually the riscv_ipi_for_rfence is
    true on these platforms; some riscv platforms may rely on the SBI to
    perform TLB shootdown, usually the riscv_ipi_for_rfence is false on
    these platforms. To keep software pagetable walkers safe in this case
    we switch to RCU based table free (MMU_GATHER_RCU_TABLE_FREE). See the
    comment below 'ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE' in
    include/asm-generic/tlb.h for more details.
    
    This patch enables MMU_GATHER_RCU_TABLE_FREE, then use
    
    *tlb_remove_page_ptdesc() for those platforms which use IPI to perform
    TLB shootdown;
    
    *tlb_remove_ptdesc() for those platforms which use SBI to perform TLB
    shootdown;
    
    Both case mean that disabling interrupts will block the free and
    protect the fast gup page walker.
    Signed-off-by: default avatarJisheng Zhang <jszhang@kernel.org>
    Reviewed-by: default avatarAlexandre Ghiti <alexghiti@rivosinc.com>
    Link: https://lore.kernel.org/r/20231219175046.2496-4-jszhang@kernel.orgSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    69be3fb1
pgalloc.h 4.53 KB