When both CONFIG_RISCV_LAZY_TLB_FLUSH and CONFIG_MMU_LSYZ_TLB_SHOOTDOWN is enabled, riscv needs an arch special method to free the mm that needs to be shot down. Thus we add arch override for do_shoot_lazy_tlb(). Signed-off-by: Xu Lu --- kernel/fork.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kernel/fork.c b/kernel/fork.c index 3da0f08615a95..b6d11acd6ac10 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -612,7 +612,8 @@ static void do_check_lazy_tlb(void *arg) WARN_ON_ONCE(current->active_mm == mm); } -static void do_shoot_lazy_tlb(void *arg) +#ifndef arch_do_shoot_lazy_tlb +static void arch_do_shoot_lazy_tlb(void *arg) { struct mm_struct *mm = arg; @@ -622,6 +623,7 @@ static void do_shoot_lazy_tlb(void *arg) switch_mm(mm, &init_mm, current); } } +#endif static void cleanup_lazy_tlbs(struct mm_struct *mm) { @@ -661,7 +663,7 @@ static void cleanup_lazy_tlbs(struct mm_struct *mm) * - A delayed freeing and RCU-like quiescing sequence based on mm * switching to avoid IPIs completely. */ - on_each_cpu_mask(mm_cpumask(mm), do_shoot_lazy_tlb, (void *)mm, 1); + on_each_cpu_mask(mm_cpumask(mm), arch_do_shoot_lazy_tlb, (void *)mm, 1); if (IS_ENABLED(CONFIG_DEBUG_VM_SHOOT_LAZIES)) on_each_cpu(do_check_lazy_tlb, (void *)mm, 1); } -- 2.20.1