riscv: Fix arch_tlbbatch_flush() by clearing the batch cpumask
authorAlexandre Ghiti <alexghiti@rivosinc.com>
Tue, 30 Jan 2024 11:55:08 +0000 (12:55 +0100)
committerPalmer Dabbelt <palmer@rivosinc.com>
Wed, 7 Feb 2024 18:19:37 +0000 (10:19 -0800)
We must clear the cpumask once we have flushed the batch, otherwise cpus
get accumulated and we end sending IPIs to more cpus than needed.

Fixes: 54d7431af73e ("riscv: Add support for BATCHED_UNMAP_TLB_FLUSH")
Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Reviewed-by: Charlie Jenkins <charlie@rivosinc.com>
Reviewed-by: Jisheng Zhang <jszhang@kernel.org>
Link: https://lore.kernel.org/r/20240130115508.105386-1-alexghiti@rivosinc.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/mm/tlbflush.c

index dffb0e5bd94253af3c2e5038229a48006b05fef2..893566e004b73fcf9a8dbc94f766e59cd00f1bb1 100644 (file)
@@ -234,4 +234,5 @@ void arch_tlbbatch_flush(struct arch_tlbflush_unmap_batch *batch)
 {
        __flush_tlb_range(&batch->cpumask, FLUSH_TLB_NO_ASID, 0,
                          FLUSH_TLB_MAX_SIZE, PAGE_SIZE);
+       cpumask_clear(&batch->cpumask);
 }