• Kirill A. Shutemov's avatar
    asm-generic: provide generic_pmdp_establish() · c58f0bb7
    Kirill A. Shutemov authored
    Patch series "Do not lose dirty bit on THP pages", v4.
    
    Vlastimil noted that pmdp_invalidate() is not atomic and we can lose
    dirty and access bits if CPU sets them after pmdp dereference, but
    before set_pmd_at().
    
    The bug can lead to data loss, but the race window is tiny and I haven't
    seen any reports that suggested that it happens in reality.  So I don't
    think it worth sending it to stable.
    
    Unfortunately, there's no way to address the issue in a generic way.  We
    need to fix all architectures that support THP one-by-one.
    
    All architectures that have THP supported have to provide atomic
    pmdp_invalidate() that returns previous value.
    
    If generic implementation of pmdp_invalidate() is used, architecture
    needs to provide atomic pmdp_estabish().
    
    pmdp_estabish() is not used out-side generic implementation of
    pmdp_invalidate() so far, but I think this can change in the future.
    
    This patch (of 12):
    
    This is an implementation of pmdp_establish() that is only suitable for
    an architecture that doesn't have hardware dirty/accessed bits.  In this
    case we can't race with CPU which sets these bits and non-atomic
    approach is fine.
    
    Link: http://lkml.kernel.org/r/20171213105756.69879-2-kirill.shutemov@linux.intel.comSigned-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: David Daney <david.daney@cavium.com>
    Cc: David Miller <davem@davemloft.net>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Cc: Nitin Gupta <nitin.m.gupta@oracle.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vineet Gupta <vgupta@synopsys.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    c58f0bb7
pgtable.h 28.3 KB