|
[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
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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |