If tlbflush request is for page only, there is no need to do a
complete local tlb shootdown.

Just do a local tlb flush for the given address.

Signed-off-by: Atish Patra <[email protected]>
---
 arch/riscv/mm/tlbflush.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/arch/riscv/mm/tlbflush.c b/arch/riscv/mm/tlbflush.c
index 8172fbf46123..b1c04751bcf1 100644
--- a/arch/riscv/mm/tlbflush.c
+++ b/arch/riscv/mm/tlbflush.c
@@ -27,7 +27,10 @@ static void __sbi_tlb_flush_range(struct cpumask *cmask, 
unsigned long start,
 
        if (cpumask_any_but(cmask, cpuid) >= nr_cpu_ids) {
                /* local cpu is the only cpu present in cpumask */
-               local_flush_tlb_all();
+               if (size <= PAGE_SIZE)
+                       local_flush_tlb_page(start);
+               else
+                       local_flush_tlb_all();
        } else {
                riscv_cpuid_to_hartid_mask(cmask, &hmask);
                sbi_remote_sfence_vma(cpumask_bits(&hmask), start, size);
-- 
2.21.0

Reply via email to