[RFC PATCH 6/8] arm64: mm: numa_fill_memblks() to add a memblock.reserved region if match.

Yuquan Wang wangyuquan1236 at phytium.com.cn
Thu Aug 1 00:54:44 PDT 2024


On Wed, May 29, 2024 at 06:12:34PM +0100, Jonathan Cameron wrote:
> CXL memory hotplug relies on additional NUMA nodes being created
> for any CXL Fixed Memory Window if there is no suitable one created
> by system firmware. To detect if system firmware has created one look
> for any normal memblock that overlaps with the Fixed Memory Window that
> has a NUMA node (nid) set.
> 
> If one is found, add a region with the same nid to memblock.reserved
> so we can match it later when CXL memory is hotplugged.
> If not, add a region anyway because a suitable NUMA node will be
> set later. So for now use NUMA_NO_NODE.
> 
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron at huawei.com>
> ---
>  arch/arm64/mm/init.c | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
> index 6a2f21b1bb58..27941f22db1c 100644
> --- a/arch/arm64/mm/init.c
> +++ b/arch/arm64/mm/init.c
> @@ -50,6 +50,32 @@
>  
>  #ifdef CONFIG_NUMA
>  
> +/*
> + * Scan existing memblocks and if this region overlaps with a region with
> + * a nid set, add a reserved memblock.
> + */
> +int __init numa_fill_memblks(u64 start, u64 end)
> +{
> +	struct memblock_region *region;
> +
> +	for_each_mem_region(region) {
> +		int nid = memblock_get_region_node(region);
> +
> +		if (nid == NUMA_NO_NODE)
> +			continue;
> +		if (!(end < region->base || start >= region->base + region->size)) {
> +			memblock_add_reserved_node(start, end - start, nid,
> +						   MEMBLOCK_RSRV_NOINIT);
> +			return 0;
> +		}
> +	}
> +
> +	memblock_add_reserved_node(start, end - start, NUMA_NO_NODE,
> +				   MEMBLOCK_RSRV_NOINIT);
> +
> +	return NUMA_NO_MEMBLK;
> +}
> +
>  static int __memory_add_physaddr_to_nid(u64 addr)
>  {
>  	unsigned long start_pfn, end_pfn, pfn = PHYS_PFN(addr);
> -- 
> 2.39.2
>

Tested-off-by: Yuquan Wang <wangyuquan1236 at phytium.com.cn>




More information about the linux-arm-kernel mailing list