[PATCH v3 0/3] xen/arm: Device Tree based CPU topology support

Hirokazu Takahashi posted 3 patches 4 days, 22 hours ago
Patches applied successfully (tree, apply log)
git fetch https://gitlab.com/xen-project/patchew/xen tags/patchew/20260629215806.11610-1-taka@valinux.co.jp
There is a newer version of this series
xen/arch/arm/Kconfig                   |  10 +
xen/arch/arm/include/asm/processor.h   |   4 -
xen/arch/arm/smpboot.c                 |  29 +-
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                     |   8 +
xen/common/Makefile                    |   1 +
xen/common/cpu-topology.c              |  59 ++++
xen/common/device-tree/Makefile        |   1 +
xen/common/device-tree/cpu-topology.c  | 403 +++++++++++++++++++++++++
xen/common/sched/credit2.c             |  21 +-
xen/common/sysctl.c                    |   1 +
xen/drivers/acpi/Kconfig               |   3 +
xen/drivers/acpi/Makefile              |   2 +
xen/drivers/acpi/topology.c            |  41 +++
xen/include/xen/acpi.h                 |   2 +
xen/include/xen/cpu-topology.h         |  55 ++++
xen/include/xen/dt-cpu-topology.h      |  29 ++
19 files changed, 642 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
[PATCH v3 0/3] xen/arm: Device Tree based CPU topology support
Posted by Hirokazu Takahashi 4 days, 22 hours ago
Hello,

This patch series introduces basic CPU topology support for ARM Xen.

I'm a bit torn on the best way to implement the fallback macros like
cpu_to_socket() in cpu-topology.h when CONFIG_CPU_TOPOLOGY is off.
Specifically, I want non-x86 architectures to share these fallbacks
while keeping x86 from seeing them.

The first approach is simple, but it will break if x86 changes how it
defines these helpers in the future. For example, if it switches from
macros to inline functions:

#ifndef cpu_to_socket
#define cpu_to_socket(cpu) (0)
#endif

The second approach is to make them active only for Device Tree setups
via CONFIG_DEVICE_TREE_PARSE. However, this might not be the "right"
way either, just in case an architecture comes along that doesn't use
DT but still populates the topology table via another method like
ACPI.

#ifdef CONFIG_DEVICE_TREE_PARSE
#define cpu_to_socket(cpu) (0)
#endif /* CONFIG_DEVICE_TREE_PARSE */

Then again, if ARM, RISC-V, and PPC all end up enabling
CONFIG_CPU_TOPOLOGY by default anyway, we won't even need this =n
fallback code. So I'm maybe just overthinking this.

Future Work:
 - Support for the "credit2_runqueue=cluster" option.
 - CPU topology support for RISC-V and PPC (once SMP support is available).
 - Topology information generation from the ACPI PPTT.

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 (3):
  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

 xen/arch/arm/Kconfig                   |  10 +
 xen/arch/arm/include/asm/processor.h   |   4 -
 xen/arch/arm/smpboot.c                 |  29 +-
 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                     |   8 +
 xen/common/Makefile                    |   1 +
 xen/common/cpu-topology.c              |  59 ++++
 xen/common/device-tree/Makefile        |   1 +
 xen/common/device-tree/cpu-topology.c  | 403 +++++++++++++++++++++++++
 xen/common/sched/credit2.c             |  21 +-
 xen/common/sysctl.c                    |   1 +
 xen/drivers/acpi/Kconfig               |   3 +
 xen/drivers/acpi/Makefile              |   2 +
 xen/drivers/acpi/topology.c            |  41 +++
 xen/include/xen/acpi.h                 |   2 +
 xen/include/xen/cpu-topology.h         |  55 ++++
 xen/include/xen/dt-cpu-topology.h      |  29 ++
 19 files changed, 642 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
Re: [PATCH v3 0/3] xen/arm: Device Tree based CPU topology support
Posted by Jan Beulich 4 days, 13 hours ago
On 29.06.2026 23:58, Hirokazu Takahashi wrote:
> 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.

Having this here is better than nothing, but may I please ask that revlog
information be per-patch? It's there where you look when reviewing
individual patches, and having it separated also helps understand which
item applies to which patch.

Jan
RE: [PATCH v3 0/3] xen/arm: Device Tree based CPU topology support
Posted by Hirokazu Takahashi 3 days, 10 hours ago
Hello,

> -----Original Message-----
> From: Jan Beulich <jbeulich@suse.com>
> Sent: Tuesday, June 30, 2026 4:08 PM
> To: Hirokazu Takahashi <taka@valinux.co.jp>
> Cc: xen-devel@lists.xenproject.org
> Subject: Re: [PATCH v3 0/3] xen/arm: Device Tree based CPU topology support
> 
> On 29.06.2026 23:58, Hirokazu Takahashi wrote:
> > 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.
> 
> Having this here is better than nothing, but may I please ask that revlog
> information be per-patch? It's there where you look when reviewing
> individual patches, and having it separated also helps understand which
> item applies to which patch.

Understood. I will split the changelog/revlog entries.

Thank you for your advice.
Hirokazu Takahashi.