On Thu, 14 Jul 2022 17:02:13 -0700 Dan Williams <dan.j.williams@xxxxxxxxx> wrote: > 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: Jason Gunthorpe <jgg@xxxxxxxxxx> > Link: https://lore.kernel.org/linux-cxl/20220420143406.GY2120790@xxxxxxxxxx/ > Cc: Matthew Wilcox <willy@xxxxxxxxxxxxx> > Cc: Christoph Hellwig <hch@xxxxxx> > Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx> Given you answered all my questions on v1, I'm fine with this. Reviewed-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>