xen/arch/arm/Kconfig | 1 + xen/arch/arm/acpi/boot.c | 2 + xen/arch/arm/include/asm/acpi.h | 2 + xen/arch/arm/include/asm/processor.h | 4 - xen/arch/arm/smpboot.c | 15 +- xen/arch/ppc/include/asm/processor.h | 4 - xen/arch/riscv/include/asm/processor.h | 4 - xen/arch/x86/include/asm/processor.h | 1 + xen/common/Kconfig | 15 + xen/common/Makefile | 1 + xen/common/cpu-topology.c | 62 ++++ xen/common/device-tree/Makefile | 1 + xen/common/device-tree/cpu-topology.c | 406 +++++++++++++++++++++++++ xen/common/sched/credit2.c | 21 +- xen/common/sysctl.c | 1 + xen/drivers/acpi/Kconfig | 3 + xen/drivers/acpi/Makefile | 1 + xen/drivers/acpi/topology.c | 255 ++++++++++++++++ xen/include/acpi/actbl3.h | 30 ++ xen/include/xen/acpi.h | 18 ++ xen/include/xen/cpu-topology.h | 83 +++++ xen/include/xen/dt-cpu-topology.h | 29 ++ 22 files changed, 923 insertions(+), 36 deletions(-) create mode 100644 xen/common/cpu-topology.c create mode 100644 xen/common/device-tree/cpu-topology.c create mode 100644 xen/drivers/acpi/topology.c create mode 100644 xen/include/xen/cpu-topology.h create mode 100644 xen/include/xen/dt-cpu-topology.h
Hello,
This patch series introduces CPU topology support based on
Device-Tree and ACPI PPTT for ARM Xen.
In v5, I added code to parse the ACPI PPTT and reflect it in the CPU
topology information.
Future Work:
- Support for the "credit2_runqueue=cluster" option.
- CPU topology support for RISC-V and PPC (once SMP support is available).
Changes in v5:
- Extracted CPU topology information from the ACPI PPTT.
- Corrected the erroneous use of CONFIG_CPU_TOPOLOGY to
CONFIG_GENERIC_CPU_TOPOLOGY.
Changes in v4:
- Only display the CPU topology configuration prompt in common/Kconfig
if the architecture defines HAS_GENERIC_CPU_TOPOLOGY.
- Move the definition of the global 'cpu_topology' pointer to
common/cpu-topology.c.
- Update the Makefile to explicitly build objects as .init.o when all
functions and data within a file are annotated with __init/__initdata,
ensuring their memory is reclaimed after system initialization.
- Add an error log in the CPU-to-node mapping function for out-of-bounds
cases.
- Use ARRAY_SIZE() instead of raw macros when guarding array accesses.
- Rename variables and functions to avoid ambiguous or misleading terms:
- Avoid 'cpuid' to prevent confusion with x86 CPUID features/instructions.
- Avoid 'node' where it could be confused with a NUMA node, explicitly
renaming them to clarify they refer to a Device Tree node.
- Move local variable declarations into the narrowest possible scope.
- Replace the unsupported "%pOF" printk format specifier with "%s" and
explicit node name retrieval.
- Remove #include <dt-cpu-topology.h> from cpu-topology.h, and ensure
the header directly includes only what its definitions require.
- Remove #include <xen/device_tree.h> from dt-cpu-topology.h, replacing
it with a forward declaration of 'struct dt_device_node'.
- Use 'const' qualifiers for pointer declarations where the pointed-to
structure is not modified.
- Explicitly #include <asm/processor.h> in cpu-topology.h to guarantee
that arch-specific definitions of cpu_to_core() and cpu_to_socket()
take precedence over the generic fallbacks.
- Introduce inline initialization functions for cpu_sibling_mask and
cpu_core_mask in cpu-topology.h, providing separate variants for both
when CONFIG_GENERIC_CPU_TOPOLOGY is enabled and disabled.
Changes in v3:
- Use (nr_cpu_ids - 1) as the maximum CPU ID here. The fix for the sparse
map mismatch issue on ARM Xen has been split out into a separate patch.
- Switch topology sibling masks to cpumask_var_t for dynamic allocation.
- Allow the system to keep running with a degraded fallback even if
the topology table allocation fails.
- Remove the temporary definitions of cpu_to_core() and cpu_to_socket()
from RISC-V and PPC processor.h.
- Minimize the use of #ifdef blocks, leveraging compiler Dead Code
Elimination (DCE) where possible.
- Clean up the code to follow the Xen coding style. Please let me know
if I missed any style nits!
- Verify successful builds across x86, RISC-V, and PPC environments.
Changes in v2:
- Generate topology information even when ACPI is enabled. Note that
this is a temporary implementation and doesn't yet parse the PPTT
(Processor Properties Topology Table).
- Added support for cpu-map node in Device Tree that doesn't contain
explicit cluster node definitions.
Changes in v1 from the previous series "Introduce Device Tree based NUMA
support for ARM Xen":
1. Optimized Memory Allocation:
The series now allocates only the minimum required memory area to manage
the essential data for the CPUs.
2. Flexible Device Tree Parsing:
The parsing logic no longer depends on the definition order of the 'cpu'
nodes and 'cpu-map' nodes in the Device Tree. They can now be read
correctly even if their orders do not match.
3. CPU Hotplug Readiness:
To support future CPU hotplug, the system assumes that inactive CPUs are
also described in the Device Tree. Xen will pre-load and generate the
topology information for these inactive CPUs during the boot phase so
it stays available in memory.
Thank you,
Hirokazu Takahashi
Hirokazu Takahashi (4):
xen/device-tree: Parse 'cpu-map' node for CPU topology exploration
xen/sched: Link CPU topology to scheduler
xen/sched: Make cpu_nr_siblings() architecture-specific
arm/acpi: Parse PPTT to initialize CPU topology
xen/arch/arm/Kconfig | 1 +
xen/arch/arm/acpi/boot.c | 2 +
xen/arch/arm/include/asm/acpi.h | 2 +
xen/arch/arm/include/asm/processor.h | 4 -
xen/arch/arm/smpboot.c | 15 +-
xen/arch/ppc/include/asm/processor.h | 4 -
xen/arch/riscv/include/asm/processor.h | 4 -
xen/arch/x86/include/asm/processor.h | 1 +
xen/common/Kconfig | 15 +
xen/common/Makefile | 1 +
xen/common/cpu-topology.c | 62 ++++
xen/common/device-tree/Makefile | 1 +
xen/common/device-tree/cpu-topology.c | 406 +++++++++++++++++++++++++
xen/common/sched/credit2.c | 21 +-
xen/common/sysctl.c | 1 +
xen/drivers/acpi/Kconfig | 3 +
xen/drivers/acpi/Makefile | 1 +
xen/drivers/acpi/topology.c | 255 ++++++++++++++++
xen/include/acpi/actbl3.h | 30 ++
xen/include/xen/acpi.h | 18 ++
xen/include/xen/cpu-topology.h | 83 +++++
xen/include/xen/dt-cpu-topology.h | 29 ++
22 files changed, 923 insertions(+), 36 deletions(-)
create mode 100644 xen/common/cpu-topology.c
create mode 100644 xen/common/device-tree/cpu-topology.c
create mode 100644 xen/drivers/acpi/topology.c
create mode 100644 xen/include/xen/cpu-topology.h
create mode 100644 xen/include/xen/dt-cpu-topology.h
--
2.43.0
Hi Hirokazu, Please use the add_maintainers.pl script before sending to make sure the right maintainers are in copy of your patches otherwise some might miss your patches. https://xen.readthedocs.io/en/latest/contribute-xen/submit-patch.html#step-2-use-add-maintainers-pl-or-get-maintainer-pl Cheers Bertrand > On 10 Jul 2026, at 00:05, Hirokazu Takahashi <taka@valinux.co.jp> wrote: > > Hello, > > This patch series introduces CPU topology support based on > Device-Tree and ACPI PPTT for ARM Xen. > > In v5, I added code to parse the ACPI PPTT and reflect it in the CPU > topology information. > > Future Work: > - Support for the "credit2_runqueue=cluster" option. > - CPU topology support for RISC-V and PPC (once SMP support is available). > > Changes in v5: > - Extracted CPU topology information from the ACPI PPTT. > - Corrected the erroneous use of CONFIG_CPU_TOPOLOGY to > CONFIG_GENERIC_CPU_TOPOLOGY. > > Changes in v4: > - Only display the CPU topology configuration prompt in common/Kconfig > if the architecture defines HAS_GENERIC_CPU_TOPOLOGY. > - Move the definition of the global 'cpu_topology' pointer to > common/cpu-topology.c. > - Update the Makefile to explicitly build objects as .init.o when all > functions and data within a file are annotated with __init/__initdata, > ensuring their memory is reclaimed after system initialization. > - Add an error log in the CPU-to-node mapping function for out-of-bounds > cases. > - Use ARRAY_SIZE() instead of raw macros when guarding array accesses. > - Rename variables and functions to avoid ambiguous or misleading terms: > - Avoid 'cpuid' to prevent confusion with x86 CPUID features/instructions. > - Avoid 'node' where it could be confused with a NUMA node, explicitly > renaming them to clarify they refer to a Device Tree node. > - Move local variable declarations into the narrowest possible scope. > - Replace the unsupported "%pOF" printk format specifier with "%s" and > explicit node name retrieval. > - Remove #include <dt-cpu-topology.h> from cpu-topology.h, and ensure > the header directly includes only what its definitions require. > - Remove #include <xen/device_tree.h> from dt-cpu-topology.h, replacing > it with a forward declaration of 'struct dt_device_node'. > - Use 'const' qualifiers for pointer declarations where the pointed-to > structure is not modified. > - Explicitly #include <asm/processor.h> in cpu-topology.h to guarantee > that arch-specific definitions of cpu_to_core() and cpu_to_socket() > take precedence over the generic fallbacks. > - Introduce inline initialization functions for cpu_sibling_mask and > cpu_core_mask in cpu-topology.h, providing separate variants for both > when CONFIG_GENERIC_CPU_TOPOLOGY is enabled and disabled. > > Changes in v3: > - Use (nr_cpu_ids - 1) as the maximum CPU ID here. The fix for the sparse > map mismatch issue on ARM Xen has been split out into a separate patch. > - Switch topology sibling masks to cpumask_var_t for dynamic allocation. > - Allow the system to keep running with a degraded fallback even if > the topology table allocation fails. > - Remove the temporary definitions of cpu_to_core() and cpu_to_socket() > from RISC-V and PPC processor.h. > - Minimize the use of #ifdef blocks, leveraging compiler Dead Code > Elimination (DCE) where possible. > - Clean up the code to follow the Xen coding style. Please let me know > if I missed any style nits! > - Verify successful builds across x86, RISC-V, and PPC environments. > > Changes in v2: > - Generate topology information even when ACPI is enabled. Note that > this is a temporary implementation and doesn't yet parse the PPTT > (Processor Properties Topology Table). > - Added support for cpu-map node in Device Tree that doesn't contain > explicit cluster node definitions. > > Changes in v1 from the previous series "Introduce Device Tree based NUMA > support for ARM Xen": > > 1. Optimized Memory Allocation: > The series now allocates only the minimum required memory area to manage > the essential data for the CPUs. > > 2. Flexible Device Tree Parsing: > The parsing logic no longer depends on the definition order of the 'cpu' > nodes and 'cpu-map' nodes in the Device Tree. They can now be read > correctly even if their orders do not match. > > 3. CPU Hotplug Readiness: > To support future CPU hotplug, the system assumes that inactive CPUs are > also described in the Device Tree. Xen will pre-load and generate the > topology information for these inactive CPUs during the boot phase so > it stays available in memory. > > Thank you, > Hirokazu Takahashi > > Hirokazu Takahashi (4): > xen/device-tree: Parse 'cpu-map' node for CPU topology exploration > xen/sched: Link CPU topology to scheduler > xen/sched: Make cpu_nr_siblings() architecture-specific > arm/acpi: Parse PPTT to initialize CPU topology > > xen/arch/arm/Kconfig | 1 + > xen/arch/arm/acpi/boot.c | 2 + > xen/arch/arm/include/asm/acpi.h | 2 + > xen/arch/arm/include/asm/processor.h | 4 - > xen/arch/arm/smpboot.c | 15 +- > xen/arch/ppc/include/asm/processor.h | 4 - > xen/arch/riscv/include/asm/processor.h | 4 - > xen/arch/x86/include/asm/processor.h | 1 + > xen/common/Kconfig | 15 + > xen/common/Makefile | 1 + > xen/common/cpu-topology.c | 62 ++++ > xen/common/device-tree/Makefile | 1 + > xen/common/device-tree/cpu-topology.c | 406 +++++++++++++++++++++++++ > xen/common/sched/credit2.c | 21 +- > xen/common/sysctl.c | 1 + > xen/drivers/acpi/Kconfig | 3 + > xen/drivers/acpi/Makefile | 1 + > xen/drivers/acpi/topology.c | 255 ++++++++++++++++ > xen/include/acpi/actbl3.h | 30 ++ > xen/include/xen/acpi.h | 18 ++ > xen/include/xen/cpu-topology.h | 83 +++++ > xen/include/xen/dt-cpu-topology.h | 29 ++ > 22 files changed, 923 insertions(+), 36 deletions(-) > create mode 100644 xen/common/cpu-topology.c > create mode 100644 xen/common/device-tree/cpu-topology.c > create mode 100644 xen/drivers/acpi/topology.c > create mode 100644 xen/include/xen/cpu-topology.h > create mode 100644 xen/include/xen/dt-cpu-topology.h > > -- > 2.43.0 > >
Hi, > Hi Hirokazu, > > Please use the add_maintainers.pl script before sending to make sure the right maintainers > are in copy of your patches otherwise some might miss your patches. Okay, I will make sure to use the add_maintainers.pl script. > https://xen.readthedocs.io/en/latest/contribute-xen/submit-patch.html#step-2-use-add-maintainers-pl-or-get-maintainer-pl > > Cheers > Bertrand Thank you, Hirokazu Takahashi.
On 29.07.2026 08:47, Bertrand Marquis wrote: > Please use the add_maintainers.pl script before sending to make sure the right maintainers > are in copy of your patches otherwise some might miss your patches. The Cc list on this cover letter is pretty short, yes, but the individual patches look to have appropriate Cc lists, and I guess that's what matters for not missing anything? Jan
Hi Jan, > On 29 Jul 2026, at 09:12, Jan Beulich <jbeulich@suse.com> wrote: > > On 29.07.2026 08:47, Bertrand Marquis wrote: >> Please use the add_maintainers.pl script before sending to make sure the right maintainers >> are in copy of your patches otherwise some might miss your patches. > > The Cc list on this cover letter is pretty short, yes, but the individual patches > look to have appropriate Cc lists, and I guess that's what matters for not missing > anything? Ack Bertrand > > Jan
© 2016 - 2026 Red Hat, Inc.