Excerpts from Geert Uytterhoeven's message of December 10, 2020 7:06 pm: > Hi Nicholas, > > On Fri, Nov 20, 2020 at 4:01 AM Nicholas Piggin <npig...@gmail.com> wrote: >> >> When offlining a CPU, powerpc/64s does not flush TLBs, rather it just >> leaves the CPU set in mm_cpumasks, so it continues to receive TLBIEs >> to manage its TLBs. >> >> However the exit_flush_lazy_tlbs() function expects that after >> returning, all CPUs (except self) have flushed TLBs for that mm, in >> which case TLBIEL can be used for this flush. This breaks for offline >> CPUs because they don't get the IPI to flush their TLB. This can lead >> to stale translations. >> >> Fix this by clearing the CPU from mm_cpumasks, then flushing all TLBs >> before going offline. >> >> These offlined CPU bits stuck in the cpumask also prevents the cpumask >> from being trimmed back to local mode, which means continual broadcast >> IPIs or TLBIEs are needed for TLB flushing. This patch prevents that >> situation too. >> >> Signed-off-by: Nicholas Piggin <npig...@gmail.com> > > Thanks for your patch! > >> --- a/arch/powerpc/platforms/powermac/smp.c >> +++ b/arch/powerpc/platforms/powermac/smp.c >> @@ -911,6 +911,8 @@ static int smp_core99_cpu_disable(void) >> >> mpic_cpu_set_priority(0xf); >> >> + cleanup_cpu_mmu_context(); >> + > > I guess this change broke pmac32_defconfig+SMP in v5.10-rc7? > > arch/powerpc/platforms/powermac/smp.c: error: implicit > declaration of function 'cleanup_cpu_mmu_context' > [-Werror=implicit-function-declaration]: => 914:2 > > http://kisskb.ellerman.id.au/kisskb/buildresult/14423174/
Hey, yeah it does thanks for catching it. This patch fixes it for me --- >From a9b5ec92ffac975e81c6d7db6ff2b1486b2723f7 Mon Sep 17 00:00:00 2001 From: Nicholas Piggin <npig...@gmail.com> Date: Mon, 14 Dec 2020 13:52:39 +1000 Subject: [PATCH] powerpc/32s: Fix cleanup_cpu_mmu_context() compile bug 32s has no tlbiel_all() defined, so just disable the cleanup with a comment. Fixes: 01b0f0eae081 ("powerpc/64s: Trim offlined CPUs from mm_cpumasks") Reported-by: Geert Uytterhoeven <ge...@linux-m68k.org> Signed-off-by: Nicholas Piggin <npig...@gmail.com> --- arch/powerpc/platforms/powermac/smp.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c index adae2a6712e1..66ef5f8f4445 100644 --- a/arch/powerpc/platforms/powermac/smp.c +++ b/arch/powerpc/platforms/powermac/smp.c @@ -911,7 +911,16 @@ static int smp_core99_cpu_disable(void) mpic_cpu_set_priority(0xf); + /* + * Would be nice for consistency if all platforms clear mm_cpumask and + * flush TLBs on unplug, but the TLB invalidation bug described in + * commit 01b0f0eae081 ("powerpc/64s: Trim offlined CPUs from + * mm_cpumasks") only applies to 64s and for now we only have the TLB + * flush code for that platform. + */ +#ifdef CONFIG_PPC64 cleanup_cpu_mmu_context(); +#endif return 0; } -- 2.23.0