For now, tlb_flush() simply calls flush_tlb_mm() which results in a flush of the whole TLB. So let's use mmu_gather fields to provide a more fine-grained flush of the TLB. Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Reviewed-by: Samuel Holland <samuel.holland@sifive.com> Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> # On RZ/Five SMARC Link: https://lore.kernel.org/r/20231030133027.19542-2-alexghiti@rivosinc.com Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
28 lines
561 B
C
28 lines
561 B
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (C) 2012 Regents of the University of California
|
|
*/
|
|
|
|
#ifndef _ASM_RISCV_TLB_H
|
|
#define _ASM_RISCV_TLB_H
|
|
|
|
struct mmu_gather;
|
|
|
|
static void tlb_flush(struct mmu_gather *tlb);
|
|
|
|
#define tlb_flush tlb_flush
|
|
#include <asm-generic/tlb.h>
|
|
|
|
static inline void tlb_flush(struct mmu_gather *tlb)
|
|
{
|
|
#ifdef CONFIG_MMU
|
|
if (tlb->fullmm || tlb->need_flush_all)
|
|
flush_tlb_mm(tlb->mm);
|
|
else
|
|
flush_tlb_mm_range(tlb->mm, tlb->start, tlb->end,
|
|
tlb_get_unmap_size(tlb));
|
|
#endif
|
|
}
|
|
|
|
#endif /* _ASM_RISCV_TLB_H */
|