• Zi Yan's avatar
    mm: thp: split huge page to any lower order pages · c010d47f
    Zi Yan authored
    To split a THP to any lower order pages, we need to reform THPs on
    subpages at given order and add page refcount based on the new page order.
    Also we need to reinitialize page_deferred_list after removing the page
    from the split_queue, otherwise a subsequent split will see list
    corruption when checking the page_deferred_list again.
    
    Note: Anonymous order-1 folio is not supported because _deferred_list,
    which is used by partially mapped folios, is stored in subpage 2 and an
    order-1 folio only has subpage 0 and 1.  File-backed order-1 folios are
    fine, since they do not use _deferred_list.
    
    [ziy@nvidia.com: fixup per discussion with Ryan]
      Link: https://lkml.kernel.org/r/494F48CD-1F0F-4CAD-884E-6D48F40AF990@nvidia.com
    Link: https://lkml.kernel.org/r/20240226205534.1603748-8-zi.yan@sent.comSigned-off-by: default avatarZi Yan <ziy@nvidia.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Luis Chamberlain <mcgrof@kernel.org>
    Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
    Cc: Michal Koutny <mkoutny@suse.com>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: Yang Shi <shy828301@gmail.com>
    Cc: Yu Zhao <yuzhao@google.com>
    Cc: Zach O'Keefe <zokeefe@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    c010d47f
huge_memory.c 100 KB