• Dan Williams's avatar
    resource: Introduce alloc_free_mem_region() · 14b80582
    Dan Williams authored
    The core of devm_request_free_mem_region() is a helper that searches for
    free space in iomem_resource and performs __request_region_locked() on
    the result of that search. The policy choices of the implementation
    conform to what CONFIG_DEVICE_PRIVATE users want which is memory that is
    immediately marked busy, and a preference to search for the first-fit
    free range in descending order from the top of the physical address
    space.
    
    CXL has a need for a similar allocator, but with the following tweaks:
    
    1/ Search for free space in ascending order
    
    2/ Search for free space relative to a given CXL window
    
    3/ 'insert' rather than 'request' the new resource given downstream
       drivers from the CXL Region driver (like the pmem or dax drivers) are
       responsible for request_mem_region() when they activate the memory
       range.
    
    Rework __request_free_mem_region() into get_free_mem_region() which
    takes a set of GFR_* (Get Free Region) flags to control the allocation
    policy (ascending vs descending), and "busy" policy (insert_resource()
    vs request_region()).
    
    As part of the consolidation of the legacy GFR_REQUEST_REGION case with
    the new default of just inserting a new resource into the free space
    some minor cleanups like not checking for NULL before calling
    devres_free() (which does its own check) is included.
    Suggested-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Link: https://lore.kernel.org/linux-cxl/20220420143406.GY2120790@nvidia.com/
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Christoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
    Link: https://lore.kernel.org/r/165784333333.1758207.13703329337805274043.stgit@dwillia2-xfh.jf.intel.comSigned-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    14b80582
Kconfig 35.1 KB