• Aneesh Kumar K.V's avatar
    powerpc/mmu_gather: enable RCU_TABLE_FREE even for !SMP case · 12e4d53f
    Aneesh Kumar K.V authored
    Patch series "Fixup page directory freeing", v4.
    
    This is a repost of patch series from Peter with the arch specific changes
    except ppc64 dropped.  ppc64 changes are added here because we are redoing
    the patch series on top of ppc64 changes.  This makes it easy to backport
    these changes.  Only the first 2 patches need to be backported to stable.
    
    The thing is, on anything SMP, freeing page directories should observe the
    exact same order as normal page freeing:
    
     1) unhook page/directory
     2) TLB invalidate
     3) free page/directory
    
    Without this, any concurrent page-table walk could end up with a
    Use-after-Free.  This is esp.  trivial for anything that has software
    page-table walkers (HAVE_FAST_GUP / software TLB fill) or the hardware
    caches partial page-walks (ie.  caches page directories).
    
    Even on UP this might give issues since mmu_gather is preemptible these
    days.  An interrupt or preempted task accessing user pages might stumble
    into the free page if the hardware caches page directories.
    
    This patch series fixes ppc64 and add generic MMU_GATHER changes to
    support the conversion of other architectures.  I haven't added patches
    w.r.t other architecture because they are yet to be acked.
    
    This patch (of 9):
    
    A followup patch is going to make sure we correctly invalidate page walk
    cache before we free page table pages.  In order to keep things simple
    enable RCU_TABLE_FREE even for !SMP so that we don't have to fixup the
    !SMP case differently in the followup patch
    
    !SMP case is right now broken for radix translation w.r.t page walk
    cache flush.  We can get interrupted in between page table free and
    that would imply we have page walk cache entries pointing to tables
    which got freed already.  Michael said "both our platforms that run on
    Power9 force SMP on in Kconfig, so the !SMP case is unlikely to be a
    problem for anyone in practice, unless they've hacked their kernel to
    build it !SMP."
    
    Link: http://lkml.kernel.org/r/20200116064531.483522-2-aneesh.kumar@linux.ibm.comSigned-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    12e4d53f
pgtable.c 13.7 KB