[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