From: Andrew Cooper Date: Thu, 17 Apr 2025 08:14:03 +0000 (+0100) Subject: xen/percpu: NUMA-position the per-CPU area X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=a20e5908e218d07c293ac8d49fb58f0f3a72125b;p=xen.git xen/percpu: NUMA-position the per-CPU area This seems to have been quite an oversight in Xen's NUMA support, albeit it probably because NUMA was arch-specific at first. This is unlikely to be useful for CONFIG_SEPARATE_XENHEAP builds, but that's only ARM32 right now, and unlikely to be interested in NUMA. Take the opportunity to sort the includes. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- diff --git a/xen/common/percpu.c b/xen/common/percpu.c index c6ecd95a08..cdd70acbea 100644 --- a/xen/common/percpu.c +++ b/xen/common/percpu.c @@ -1,8 +1,9 @@ /* SPDX-License-Identifier: GPL-2.0-only */ -#include #include #include #include +#include +#include #include #include @@ -27,6 +28,8 @@ void __init percpu_init_areas(void) static int init_percpu_area(unsigned int cpu) { + nodeid_t node = cpu_to_node(cpu); + unsigned int memflags = node != NUMA_NO_NODE ? MEMF_node(node) : 0; char *p; if ( __per_cpu_offset[cpu] != INVALID_PERCPU_AREA ) @@ -34,7 +37,7 @@ static int init_percpu_area(unsigned int cpu) ? 0 : -EBUSY; - if ( (p = alloc_xenheap_pages(PERCPU_ORDER, 0)) == NULL ) + if ( (p = alloc_xenheap_pages(PERCPU_ORDER, memflags)) == NULL ) return -ENOMEM; memset(p, 0, __per_cpu_data_end - __per_cpu_start);