• David Hildenbrand's avatar
    mm/huge_memory: conditionally call maybe_mkwrite() and drop pte_wrprotect() in... · 1462c52e
    David Hildenbrand authored
    mm/huge_memory: conditionally call maybe_mkwrite() and drop pte_wrprotect() in __split_huge_pmd_locked()
    
    No need to call maybe_mkwrite() to then wrprotect if the source PMD was not
    writable.
    
    It's worth nothing that this now allows for PTEs to be writable even if
    the source PMD was not writable: if vma->vm_page_prot includes write
    permissions.
    
    As documented in commit 931298e1 ("mm/userfaultfd: rely on
    vma->vm_page_prot in uffd_wp_range()"), any mechanism that intends to
    have pages wrprotected (COW, writenotify, mprotect, uffd-wp, softdirty,
    ...) has to properly adjust vma->vm_page_prot upfront, to not include
    write permissions. If vma->vm_page_prot includes write permissions, the
    PTE/PMD can be writable as default.
    
    This now mimics the handling in mm/migrate.c:remove_migration_pte() and in
    mm/huge_memory.c:remove_migration_pmd(), which has been in place for a
    long time (except that 96a9c287 ("mm/migrate: fix wrongly apply write
    bit after mkdirty on sparc64") temporarily changed it).
    
    Link: https://lkml.kernel.org/r/20230411142512.438404-7-david@redhat.comSigned-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Cc: Anshuman Khandual <anshuman.khandual@arm.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Sam Ravnborg <sam@ravnborg.org>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Yu Zhao <yuzhao@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    1462c52e
huge_memory.c 88 KB