• Alistair Popple's avatar
    mm/rmap: split migration into its own function · a98a2f0c
    Alistair Popple authored
    Migration is currently implemented as a mode of operation for
    try_to_unmap_one() generally specified by passing the TTU_MIGRATION flag
    or in the case of splitting a huge anonymous page TTU_SPLIT_FREEZE.
    
    However it does not have much in common with the rest of the unmap
    functionality of try_to_unmap_one() and thus splitting it into a separate
    function reduces the complexity of try_to_unmap_one() making it more
    readable.
    
    Several simplifications can also be made in try_to_migrate_one() based on
    the following observations:
    
     - All users of TTU_MIGRATION also set TTU_IGNORE_MLOCK.
     - No users of TTU_MIGRATION ever set TTU_IGNORE_HWPOISON.
     - No users of TTU_MIGRATION ever set TTU_BATCH_FLUSH.
    
    TTU_SPLIT_FREEZE is a special case of migration used when splitting an
    anonymous page.  This is most easily dealt with by calling the correct
    function from unmap_page() in mm/huge_memory.c - either try_to_migrate()
    for PageAnon or try_to_unmap().
    
    Link: https://lkml.kernel.org/r/20210616105937.23201-5-apopple@nvidia.comSigned-off-by: default avatarAlistair Popple <apopple@nvidia.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarRalph Campbell <rcampbell@nvidia.com>
    Cc: Ben Skeggs <bskeggs@redhat.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Jason Gunthorpe <jgg@nvidia.com>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Shakeel Butt <shakeelb@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a98a2f0c
migrate.c 78.1 KB