[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [PATCH v9 0/4] xen/acpi,device-tree: Introduce generic CPU topology support for ACPI and DT


  • To: Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>
  • From: Hirokazu Takahashi <taka@xxxxxxxxxxxxx>
  • Date: Wed, 29 Jul 2026 17:47:38 +0000
  • Accept-language: ja-JP, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=iaqtcshLVbhaD1dcz/UCxo6ZgW22nISirEcg/cTrN4M=; b=fOgaNcVfvKXOGsG1B/+wKV+07nq0yDWj251uvP1KfEJnEW7SQ78isxmYcyNPovaEc4qvoJUdrhBMpHIX7JOUeiBDPbaZIWrmLNkQo2i/iggBa1fVaywr1CcxE+9B6iJ//muAiiU7GCiyaExGfhnA3epGtz8B+Zo/U/lnIQWZvCEBWXIcA2i0R26cB6UwpFKTcFoeipUtkhGZnjtpJYBHVIty8cS1XpX8HcDegnKQPeRldjEIMkTYJFBl6HtM5+5gwOBKWuF1uvGGNGwa7Vfr7hzbsHrrsTkKRlo2SU9YaabKiDpKpUEvy81edjdtD3fDY3Jv/efbpdsGHNq/XsoRXQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rNINvfTuqy31CPS2l+oKCnEPmxyyod8AQKNsBD/hH0rzvP/LuSqzcG7gMZg/FgcqghRyNUXqdKE/qklg/iFbWcBfT3CJRoxt4D4eZ1guGPPfD4lipOqnmZzQm2eBGL4whuYRSP/quTv+15YiWl0FA5GOQCBtrdSBu4CwVM+TP27Jx6PEhm4j/ct9MEpLtr8/bO7CF8nqfWwL4lJZONBnYMfIpxLjXUiPgc4UTfhae3QcS0405poY4F4a38ZTgyoFlthfWyANbHAZ/5U9uRFNf2JIF1+0hnEkKyzjs0u14plllt5GeBcd1mGAPBHmADB+aQbqAsTjULx+qyBL2xk1dw==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=valinux.co.jp header.i="@valinux.co.jp" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Wed, 29 Jul 2026 17:47:59 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHdHk7kiFOoxTQzWEaKzsYc0MFEnraExJPg
  • Thread-topic: [PATCH v9 0/4] xen/acpi,device-tree: Introduce generic CPU topology support for ACPI and DT

Hi Stefano, Julien, Bertrand and Michal,

When you have a moment, could you please taka a look at the following
series and give me your feedbak.

Link to v9 series: 
https://old-list-archives.xenproject.org/archives/html/xen-devel/2026-07/msg01208.html

Thanks,
Hirokazu Takahashi.

> -----Original Message-----
> From: Hirokazu Takahashi <taka@xxxxxxxxxxxxx>
> Sent: Tuesday, July 28, 2026 2:07 PM
> To: xen-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Mykyta_Poturai@xxxxxxxx; Hirokazu Takahashi <taka@xxxxxxxxxxxxx>
> Subject: [PATCH v9 0/4] xen/acpi,device-tree: Introduce generic CPU topology
> support for ACPI and DT
> 
> Hello,
> 
> This patch series integrates CPU topology discovery into the Xen hypervisor
> for both ACPI and Device Tree platforms.
> 
> Changes in v9:
>  - Add bounds checking for the number of private resources in the PPTT
>    processor table.
>  - Verify the validity of entries when indexing into the map_cpu_acpiid table.
>  - Coding style adjustments (following Xen standards):
>    * Place logical operators ('||', '&&') at the end of lines when splitting
>      multi-line conditions.
>    * Place arithmetic operators ('+', '-') at the end of lines when wrapping
>      long assignment statements.
>    * Enclose bitwise operations in parentheses within conditional expressions
>      that combine logical operators.
>    * Combine variable declaration and initialization where applicable.
> 
> Changes in v8:
> - PPTT Table Validation & Hardening:
>   * Relaxed processor node length check to allow
>     proc->header.length >= table_size.
>   * Treated root nodes (nodes with parent == 0) as equivalent to
>     ACPI_PPTT_PHYSICAL_PACKAGE nodes.
> 
> - Build & Kconfig Adjustments:
>   * Removed leftovers of ACPI_CPU_TOPOLOGY definition from
>     xen/drivers/acpi/Kconfig.
> 
> - Code Cleanups & Style Conformance:
>   * Moved INVALID_ACPIID definition to xen/acpi.h to make it available
>     cross-architecture.
>   * Removed ARM-specific references from comments in
>     architecture-agnostic code.
>   * Added explicit parentheses around bitwise operations in logical
>     expressions.
>   * Placed binary logical operators (||, &&) at the end of lines when
>     splitting conditional statements.
>   * Combined variable declarations and initializations where appropriate.
>   * Removed trailing full stops ('.') from printk log messages.
>   * Fixed printk format specifier mix-up.
>   * Explicitly included <xen/cpu-topology.h> in xen/common/cpu.c.
> 
> Changes in v7:
> - PPTT Table Validation & Hardening:
>   * find_pptt_node(): Added leaf node verification (ACPI 6.3+).
>   * acpi_init_cpu_topology(): Added bounds checks to ensure proc->parent
>     validly references memory strictly inside the PPTT table bounds.
>   * Factored out shared table checking helper functions used by both
>     find_pptt_node() and acpi_init_cpu_topology().
>   * Added subtable alignment checks and strengthened processor structure
>     size validation.
> 
> - Graceful Fallback & Allocation:
>   * Treated missing topology definitions as benign conditions.
>   * Used xvzalloc_array() for temporary memory allocations during
>     initialization.
> 
> - Build & Kconfig Adjustments:
>   * Updated Kconfig to use "depends on UNSUPPORTED" instead of "if  
> UNSUPPORTED".
> 
> - Code Cleanups & Style Conformance:
>   * Used designated initializers for structure data initializations.
>   * Consolidated topology helpers with IS_ENABLED().
>   * Removed redundant error checks and reduced unnecessary pointer casts.
>   * Switched type-based sizeof(type) to variable-based sizeof(*var).
>   * Added leading spaces before labels ( out:)
> 
> Changes in v6:
>  - Renamed the series subject from "xen/arm: Device Tree based CPU topology
>    support" to reflect the inclusion of generic ACPI PPTT topology parsing.
> 
>  - Infrastructure & Kconfig:
>    * Updated Kconfig to make both DT_CPU_TOPOLOGY and ACPI_CPU_TOPOLOGY
>      select GENERIC_CPU_TOPOLOGY.
>    * Ensured that if topology parsing from either DT or ACPI PPTT fails, the
>      CPU topology table is freed to fall back to the non-topology behavior.
>    * Moved the `cpu_topology` definition to `cpu.c` so that variables and
>      functions in `cpu-topology.c` can be completely freed after Xen init.
> 
>  - Topology Logic (DT / ACPI):
>    * Set the cluster ID to 0 when the cluster definition is missing from the
>      Device Tree `cpu-map` node.
>    * Handled cases where cluster info is missing upon reaching a physical
>      package in the PPTT parser by assuming one cluster per socket.
>    * Split out the import of ACPI PPTT definitions from the Linux kernel
>      (including unused definitions) into a separate standalone patch.
> 
>  - Robustness & Safety:
>    * Avoided assuming `np` becomes NULL after exiting 
> `dt_for_each_child_node()`;
>      explicitly return NULL instead.
>    * Added bounds-checking `ASSERT`s for values returned by `cpumask_first()`.
>    * Added explicit braces `{}` to nested `if` statements to clarify `else`
>      scoping and maintain style symmetry.
>    * Enforced an upper limit on the PPTT parsing loop iterations to prevent
>      infinite loops on corrupted tables.
>    * Treat the absence of a physical package node definition in PPTT as a
>      parsing error.
> 
>  - Optimization & Efficiency:
>    * Optimized `setup_siblings_masks()` to eliminate redundant loop 
> iterations.
>    * Dynamically allocate the temporary data storage used during ACPI PPTT
>      parsing.
> 
>  - Code Cleanup & Refactoring:
>    * Replaced the `invalid_topo_id` constant with the `INVALID_TOPO_ID` macro.
>    * Initialized all members of the `cpu_map` array with `INVALID_TOPO_ID`.
>    * Added a blank line between `<xen/...>` and `<asm/...>` header groups.
>    * Reordered `#ifdef` blocks to prioritize generic logic over architecture-
>      specific ones.
>    * Corrected code indentation.
>    * Applied the `static` specifier to file-local data structures and 
> functions.
>    * Minimized the use of fixed-width `uint32_t` types, restricting its use 
> only
>      where strictly required by the 32-bit ACPI ID specification.
>    * Declared `map_cpu_acpiid[]` as static and introduced the helper function
>      `acpi_map_cpu_acpiid()` for managed access.
>    * Renamed local variables to more intuitive names.
>    * Simplified the implementation of `get_logical_id()`.
>    * Refactored PPTT parsing to reduce type casting by using `container_of()`
>      and switching from `char *` to `void *` pointers.
>    * Removed redundant error checks.
>    * Cleaned up unused variables and eliminated debug print statements.
> 
> 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
>   xen/acpi: Parse PPTT to initialize CPU topology
> 
>  xen/arch/arm/Kconfig                   |   1 +
>  xen/arch/arm/acpi/boot.c               |   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/acpi.h        |   2 -
>  xen/arch/x86/include/asm/processor.h   |   1 +
>  xen/common/Kconfig                     |  22 ++
>  xen/common/Makefile                    |   1 +
>  xen/common/cpu-topology.c              |  62 ++++
>  xen/common/cpu.c                       |   5 +
>  xen/common/device-tree/Makefile        |   1 +
>  xen/common/device-tree/cpu-topology.c  | 409
> +++++++++++++++++++++++++
>  xen/common/sched/credit2.c             |  21 +-
>  xen/common/sysctl.c                    |   1 +
>  xen/drivers/acpi/Makefile              |   1 +
>  xen/drivers/acpi/topology.c            | 341
> +++++++++++++++++++++
>  xen/include/xen/acpi.h                 |  17 +
>  xen/include/xen/cpu-topology.h         |  76 +++++
>  xen/include/xen/dt-cpu-topology.h      |  35 +++
>  21 files changed, 987 insertions(+), 38 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




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.