The patch titled Subject: uprobe: use FOLL_SPLIT_PMD instead of FOLL_SPLIT has been added to the -mm tree. Its filename is uprobe-use-foll_split_pmd-instead-of-foll_split.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/uprobe-use-foll_split_pmd-instead-of-foll_split.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/uprobe-use-foll_split_pmd-instead-of-foll_split.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Song Liu <songliubraving@xxxxxx> Subject: uprobe: use FOLL_SPLIT_PMD instead of FOLL_SPLIT Use the newly added FOLL_SPLIT_PMD in uprobe. This preserves the huge page when the uprobe is enabled. When the uprobe is disabled, newer instances of the same application could still benefit from huge page. For the next step, we will enable khugepaged to regroup the pmd, so that existing instances of the application could also benefit from huge page after the uprobe is disabled. Link: http://lkml.kernel.org/r/20190815164525.1848545-5-songliubraving@xxxxxx Signed-off-by: Song Liu <songliubraving@xxxxxx> Acked-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> Reviewed-by: Srikar Dronamraju <srikar@xxxxxxxxxxxxxxxxxx> Reviewed-by: Oleg Nesterov <oleg@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- kernel/events/uprobes.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) --- a/kernel/events/uprobes.c~uprobe-use-foll_split_pmd-instead-of-foll_split +++ a/kernel/events/uprobes.c @@ -155,7 +155,7 @@ static int __replace_page(struct vm_area { struct mm_struct *mm = vma->vm_mm; struct page_vma_mapped_walk pvmw = { - .page = old_page, + .page = compound_head(old_page), .vma = vma, .address = addr, }; @@ -166,8 +166,6 @@ static int __replace_page(struct vm_area mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, mm, addr, addr + PAGE_SIZE); - VM_BUG_ON_PAGE(PageTransHuge(old_page), old_page); - if (new_page) { err = mem_cgroup_try_charge(new_page, vma->vm_mm, GFP_KERNEL, &memcg, false); @@ -481,7 +479,7 @@ int uprobe_write_opcode(struct arch_upro retry: /* Read the page with vaddr into memory */ ret = get_user_pages_remote(NULL, mm, vaddr, 1, - FOLL_FORCE | FOLL_SPLIT, &old_page, &vma, NULL); + FOLL_FORCE | FOLL_SPLIT_PMD, &old_page, &vma, NULL); if (ret <= 0) return ret; _ Patches currently in -mm which might be from songliubraving@xxxxxx are filemap-check-compound_headpage-mapping-in-filemap_fault.patch filemap-check-compound_headpage-mapping-in-pagecache_get_page.patch filemap-update-offset-check-in-filemap_fault.patch mmthp-stats-for-file-backed-thp.patch khugepaged-rename-collapse_shmem-and-khugepaged_scan_shmem.patch mmthp-add-read-only-thp-support-for-non-shmem-fs.patch mmthp-add-read-only-thp-support-for-non-shmem-fs-fix.patch mmthp-add-read-only-thp-support-for-non-shmem-fs-fix-2.patch mmthp-avoid-writes-to-file-with-thp-in-pagecache.patch mm-move-memcmp_pages-and-pages_identical.patch uprobe-use-original-page-when-all-uprobes-are-removed.patch mm-thp-introduce-foll_split_pmd.patch uprobe-use-foll_split_pmd-instead-of-foll_split.patch khugepaged-enable-collapse-pmd-for-pte-mapped-thp.patch uprobe-collapse-thp-pmd-after-removing-all-uprobes.patch