• Vitaly Kuznetsov's avatar
    x86/mm: Enable RCU based page table freeing (CONFIG_HAVE_RCU_TABLE_FREE=y) · 9e52fc2b
    Vitaly Kuznetsov authored
    There's a subtle bug in how some of the paravirt guest code handles
    page table freeing on x86:
    
    On x86 software page table walkers depend on the fact that remote TLB flush
    does an IPI: walk is performed lockless but with interrupts disabled and in
    case the page table is freed the freeing CPU will get blocked as remote TLB
    flush is required. On other architectures which don't require an IPI to do
    remote TLB flush we have an RCU-based mechanism (see
    include/asm-generic/tlb.h for more details).
    
    In virtualized environments we may want to override the ->flush_tlb_others
    callback in pv_mmu_ops and use a hypercall asking the hypervisor to do a
    remote TLB flush for us. This breaks the assumption about IPIs. Xen PV has
    been doing this for years and the upcoming remote TLB flush for Hyper-V will
    do it too.
    
    This is not safe, as software page table walkers may step on an already
    freed page.
    
    Fix the bug by enabling the RCU-based page table freeing mechanism,
    CONFIG_HAVE_RCU_TABLE_FREE=y.
    
    Testing with kernbench and mmap/munmap microbenchmarks, and neither showed
    any noticeable performance impact.
    Suggested-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Acked-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Acked-by: default avatarJuergen Gross <jgross@suse.com>
    Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Andrew Cooper <andrew.cooper3@citrix.com>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: Jork Loeser <Jork.Loeser@microsoft.com>
    Cc: KY Srinivasan <kys@microsoft.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Stephen Hemminger <sthemmin@microsoft.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: xen-devel@lists.xenproject.org
    Link: http://lkml.kernel.org/r/20170828082251.5562-1-vkuznets@redhat.com
    [ Rewrote/fixed/clarified the changelog. ]
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    9e52fc2b
pgtable.c 16.5 KB