• Dan Williams's avatar
    mm: introduce find_dev_pagemap() · 9476df7d
    Dan Williams authored
    There are several scenarios where we need to retrieve and update
    metadata associated with a given devm_memremap_pages() mapping, and the
    only lookup key available is a pfn in the range:
    
    1/ We want to augment vmemmap_populate() (called via arch_add_memory())
       to allocate memmap storage from pre-allocated pages reserved by the
       device driver.  At vmemmap_alloc_block_buf() time it grabs device pages
       rather than page allocator pages.  This is in support of
       devm_memremap_pages() mappings where the memmap is too large to fit in
       main memory (i.e. large persistent memory devices).
    
    2/ Taking a reference against the mapping when inserting device pages
       into the address_space radix of a given inode.  This facilitates
       unmap_mapping_range() and truncate_inode_pages() operations when the
       driver is tearing down the mapping.
    
    3/ get_user_pages() operations on ZONE_DEVICE memory require taking a
       reference against the mapping so that the driver teardown path can
       revoke and drain usage of device pages.
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Tested-by: default avatarLogan Gunthorpe <logang@deltatee.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Dave Chinner <david@fromorbit.com>
    Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9476df7d
memremap.c 7.39 KB