| From: "Mike Rapoport (Microsoft)" <rppt@kernel.org> |
| Subject: x86/numa: simplify numa_distance allocation |
| Date: Wed, 7 Aug 2024 09:40:54 +0300 |
| |
| Allocation of numa_distance uses memblock_phys_alloc_range() to limit |
| allocation to be below the last mapped page. |
| |
| But NUMA initializaition runs after the direct map is populated and there |
| is also code in setup_arch() that adjusts memblock limit to reflect how |
| much memory is already mapped in the direct map. |
| |
| Simplify the allocation of numa_distance and use plain memblock_alloc(). |
| |
| Link: https://lkml.kernel.org/r/20240807064110.1003856-11-rppt@kernel.org |
| Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org> |
| Tested-by: Zi Yan <ziy@nvidia.com> # for x86_64 and arm64 |
| Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| Tested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> [arm64 + CXL via QEMU] |
| Acked-by: Dan Williams <dan.j.williams@intel.com> |
| Acked-by: David Hildenbrand <david@redhat.com> |
| Cc: Alexander Gordeev <agordeev@linux.ibm.com> |
| Cc: Andreas Larsson <andreas@gaisler.com> |
| Cc: Arnd Bergmann <arnd@arndb.de> |
| Cc: Borislav Petkov <bp@alien8.de> |
| Cc: Catalin Marinas <catalin.marinas@arm.com> |
| Cc: Christophe Leroy <christophe.leroy@csgroup.eu> |
| Cc: Dave Hansen <dave.hansen@linux.intel.com> |
| Cc: Davidlohr Bueso <dave@stgolabs.net> |
| Cc: David S. Miller <davem@davemloft.net> |
| Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Cc: Heiko Carstens <hca@linux.ibm.com> |
| Cc: Huacai Chen <chenhuacai@kernel.org> |
| Cc: Ingo Molnar <mingo@redhat.com> |
| Cc: Jiaxun Yang <jiaxun.yang@flygoat.com> |
| Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> |
| Cc: Jonathan Corbet <corbet@lwn.net> |
| Cc: Michael Ellerman <mpe@ellerman.id.au> |
| Cc: Palmer Dabbelt <palmer@dabbelt.com> |
| Cc: Rafael J. Wysocki <rafael@kernel.org> |
| Cc: Rob Herring (Arm) <robh@kernel.org> |
| Cc: Samuel Holland <samuel.holland@sifive.com> |
| Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Vasily Gorbik <gor@linux.ibm.com> |
| Cc: Will Deacon <will@kernel.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| arch/x86/mm/numa.c | 7 ++----- |
| 1 file changed, 2 insertions(+), 5 deletions(-) |
| |
| --- a/arch/x86/mm/numa.c~x86-numa-simplify-numa_distance-allocation |
| +++ a/arch/x86/mm/numa.c |
| @@ -331,7 +331,6 @@ static int __init numa_alloc_distance(vo |
| nodemask_t nodes_parsed; |
| size_t size; |
| int i, j, cnt = 0; |
| - u64 phys; |
| |
| /* size the new table and allocate it */ |
| nodes_parsed = numa_nodes_parsed; |
| @@ -342,16 +341,14 @@ static int __init numa_alloc_distance(vo |
| cnt++; |
| size = cnt * cnt * sizeof(numa_distance[0]); |
| |
| - phys = memblock_phys_alloc_range(size, PAGE_SIZE, 0, |
| - PFN_PHYS(max_pfn_mapped)); |
| - if (!phys) { |
| + numa_distance = memblock_alloc(size, PAGE_SIZE); |
| + if (!numa_distance) { |
| pr_warn("Warning: can't allocate distance table!\n"); |
| /* don't retry until explicitly reset */ |
| numa_distance = (void *)1LU; |
| return -ENOMEM; |
| } |
| |
| - numa_distance = __va(phys); |
| numa_distance_cnt = cnt; |
| |
| /* fill with the default distances */ |
| _ |