Skip to content
  • Kirill A. Shutemov's avatar
    uprobes: split THPs before trying to replace them · c8394812
    Kirill A. Shutemov authored
    Patch series "Fix few rmap-related THP bugs", v3.
    
    The patchset fixes handing PTE-mapped THPs in page_referenced() and
    page_idle_clear_pte_refs().
    
    To achieve that I've intrdocued new helper -- page_vma_mapped_walk() --
    which replaces all page_check_address{,_transhuge}() and covers all THP
    cases.
    
    Patchset overview:
      - First patch fixes one uprobe bug (unrelated to the rest of the
        patchset, just spotted it at the same time);
    
      - Patches 2-5 fix handling PTE-mapped THPs in page_referenced(),
        page_idle_clear_pte_refs() and rmap core;
    
      - Patches 6-12 convert all page_check_address{,_transhuge}() users
        (plus remove_migration_pte()) to page_vma_mapped_walk() and drop
        unused helpers.
    
    I think the fixes are not critical enough for stable@ as they don't lead
    to crashes or hangs, only suboptimal behaviour.
    
    This patch (of 12):
    
    For THPs page_check_address() always fails.  It leads to endless loop in
    uprobe_write_opcode().
    
    Testcase with huge-tmpfs (uprobes cannot probe anonymous memory).
    
    	mount -t debugfs none /sys/kernel/debug
    	mount -t tmpfs -o huge=always none /mnt
    	gcc -Wall -O2 -o /mnt/test -x c - <<EOF
    	int main(void)
    	{
    		return 0;
    	}
    	/* Padding to map the code segment with huge pmd */
    	asm (".zero 2097152");
    	EOF
    	echo 'p /mnt/test:0' > /sys/kernel/debug/tracing/uprobe_events
    	echo 1 > /sys/kernel/debug/tracing/events/uprobes/enable
    	/mnt/test
    
    Let's split THPs before trying to replace.
    
    Link: http://lkml.kernel.org/r/20170129173858.45174-2-kirill.shutemov@linux.intel.com
    
    
    Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Acked-by: default avatarRik van Riel <riel@redhat.com>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Hillf Danton <hillf.zj@alibaba-inc.com>
    Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    c8394812