Files
linux/include/linux
Dan Williams 14b80582c4 resource: Introduce alloc_free_mem_region()
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@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: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/165784333333.1758207.13703329337805274043.stgit@dwillia2-xfh.jf.intel.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2022-07-21 17:19:25 -07:00
..
2022-05-10 16:03:52 +08:00
2022-04-20 12:59:50 +05:30
2022-05-22 20:44:29 +01:00
2022-03-23 19:58:38 +01:00
2022-02-01 14:25:50 +02:00
2022-01-22 08:33:34 +02:00
2022-06-08 14:04:14 -04:00
2022-05-20 15:29:00 -07:00
2022-03-11 19:15:03 -08:00
2022-04-22 12:32:03 +02:00
2022-03-15 10:32:44 +01:00
2022-05-16 13:37:59 -07:00
2021-12-10 17:10:55 -08:00
2021-12-10 12:51:28 +01:00
2021-08-26 15:32:28 -04:00
2022-03-16 15:13:36 -07:00
2022-06-03 06:52:57 -07:00
2022-05-13 07:20:18 -07:00
2022-01-20 08:52:54 +02:00
2022-03-02 22:44:49 -08:00
2022-02-28 23:26:27 -08:00
2022-02-19 19:23:53 -08:00
2022-02-14 15:43:15 +01:00
2022-03-18 09:47:04 +01:00
2022-05-02 14:06:20 -06:00
2022-06-06 09:52:17 +09:00
2022-01-27 13:53:26 +00:00
2022-05-03 16:09:03 -04:00
2022-04-21 07:36:56 -04:00
2022-05-19 14:08:53 -07:00
2022-03-21 12:57:38 -04:00
2022-05-13 07:20:17 -07:00
2022-04-28 23:16:14 -07:00
2022-05-12 10:29:41 -07:00
2021-12-16 22:22:20 +01:00
2022-04-28 16:31:10 +02:00
2022-04-01 14:40:44 -04:00
2022-05-17 13:32:46 -04:00
2022-02-09 09:24:40 -05:00
2022-01-12 10:14:09 -06:00
2021-11-16 19:07:53 -08:00
2021-09-17 13:52:17 +01:00
2021-09-27 09:27:29 -04:00
2022-02-02 07:49:59 -07:00
2022-07-19 15:38:04 -07:00
2021-09-27 17:00:21 +02:00
2022-02-09 08:04:44 +01:00
2022-02-09 08:04:44 +01:00
2022-04-05 10:24:38 +02:00
2021-10-14 13:29:18 +02:00
2022-04-19 10:19:02 -07:00
2022-01-22 08:33:37 +02:00
2022-01-08 12:43:57 -06:00
2021-11-18 09:36:39 +01:00
2022-01-24 14:45:02 +01:00
2022-06-10 11:29:48 +02:00
2022-03-08 14:33:36 -06:00
2022-03-17 20:16:29 -07:00
2022-03-23 19:58:41 +01:00
2022-05-22 21:03:01 +01:00
2022-04-07 12:53:54 +02:00
2022-02-24 15:04:51 +00:00
2022-06-02 10:15:05 -07:00
2022-05-08 01:33:08 -07:00
2022-02-25 09:36:06 +01:00
2022-04-11 19:18:27 -06:00
2022-03-22 15:57:11 -07:00
2021-11-25 18:35:23 +01:00
2022-01-26 14:54:48 +01:00
2022-01-27 13:53:27 +00:00
2021-10-12 11:41:39 -03:00
2022-05-24 08:41:18 -06:00
2022-05-31 12:45:10 -04:00
2022-06-13 09:54:52 -07:00
2021-12-09 10:49:56 -08:00
2021-10-19 23:44:30 +08:00