MAINTAINERS | 1 + arch/x86/boot/compressed/pgtable_64.c | 1 + arch/x86/boot/startup/sme.c | 9 +- arch/x86/coco/tdx/tdx.c | 6 +- arch/x86/events/amd/core.c | 2 + arch/x86/events/amd/ibs.c | 1 + arch/x86/events/amd/lbr.c | 2 + arch/x86/events/amd/power.c | 3 + arch/x86/events/amd/uncore.c | 15 +- arch/x86/events/intel/core.c | 1 + arch/x86/events/intel/lbr.c | 1 + arch/x86/events/zhaoxin/core.c | 12 +- arch/x86/include/asm/acrn.h | 2 + arch/x86/include/asm/cpu.h | 6 + arch/x86/include/asm/cpuid.h | 8 - arch/x86/include/asm/cpuid/api.h | 321 ++- arch/x86/include/asm/cpuid/leaf_types.h | 2055 ++++++++++++++++++ arch/x86/include/asm/cpuid/types.h | 117 + arch/x86/include/asm/microcode.h | 1 + arch/x86/include/asm/processor.h | 3 +- arch/x86/include/asm/xen/hypervisor.h | 1 + arch/x86/kernel/amd_nb.c | 9 +- arch/x86/kernel/cpu/Makefile | 3 +- arch/x86/kernel/cpu/amd.c | 21 +- arch/x86/kernel/cpu/cacheinfo.c | 284 +-- arch/x86/kernel/cpu/centaur.c | 1 + arch/x86/kernel/cpu/common.c | 58 +- arch/x86/kernel/cpu/cpuid_debugfs.c | 102 + arch/x86/kernel/cpu/cpuid_parser.c | 201 ++ arch/x86/kernel/cpu/cpuid_parser.h | 109 + arch/x86/kernel/cpu/hygon.c | 1 + arch/x86/kernel/cpu/intel.c | 17 +- arch/x86/kernel/cpu/mce/core.c | 63 +- arch/x86/kernel/cpu/mce/inject.c | 1 + arch/x86/kernel/cpu/resctrl/core.c | 6 +- arch/x86/kernel/cpu/resctrl/monitor.c | 1 + arch/x86/kernel/cpu/scattered.c | 3 +- arch/x86/kernel/cpu/sgx/main.c | 3 + arch/x86/kernel/cpu/topology_amd.c | 3 +- arch/x86/kernel/cpu/topology_common.c | 3 +- arch/x86/kernel/cpu/topology_ext.c | 3 +- arch/x86/kernel/cpu/transmeta.c | 3 + arch/x86/kernel/cpu/zhaoxin.c | 1 + arch/x86/kernel/cpuid.c | 6 +- arch/x86/kernel/paravirt.c | 29 +- arch/x86/kvm/cpuid.h | 3 + arch/x86/kvm/mmu/spte.c | 1 + arch/x86/lib/cpu.c | 41 +- drivers/cpufreq/speedstep-lib.c | 6 +- drivers/firmware/efi/libstub/x86-5lvl.c | 1 + drivers/hwmon/fam15h_power.c | 14 +- drivers/hwmon/k10temp.c | 2 + drivers/hwmon/k8temp.c | 12 +- drivers/thermal/intel/intel_hfi.c | 1 + drivers/thermal/intel/x86_pkg_temp_thermal.c | 15 +- sound/soc/intel/avs/tgl.c | 25 +- 56 files changed, 3215 insertions(+), 405 deletions(-) delete mode 100644 arch/x86/include/asm/cpuid.h create mode 100644 arch/x86/include/asm/cpuid/leaf_types.h create mode 100644 arch/x86/kernel/cpu/cpuid_debugfs.c create mode 100644 arch/x86/kernel/cpu/cpuid_parser.c create mode 100644 arch/x86/kernel/cpu/cpuid_parser.h
Hi, This series introduces a centralized CPUID model for the x86 subsystem. Rationale for this work can be found at: https://lore.kernel.org/lkml/874ixernra.ffs@tglx https://gitlab.com/x86-cpuid.org/x86-cpuid-db The first 19 patches can be independently applied. Changelog v3 ~~~~~~~~~~~~ * Transform the final CPUID(0x80000006) call site, inline C function cpuid_amd_hygon_has_l3_cache() at <asm/cpuid/api.h>, to the new parsed CPUID API. Due to this C inline function requiring access to 'struct cpuinfo_x86', a circular dependency emerged in the headers: <asm/cpuid/api.h> includes <asm/processor.h> # for 'struct cpuinfo_x86' <asm/processor.h> includes <asm/cpuid/api.h> # for CPUID types Turns out, <asm/processor.h> does not need <asm/cpuid/api.h>, and <asm/cpuid/types.h> is enough for it. Thus, let <asm/processor.h> include <asm/cpuid/types.h> instead. For all call sites that included the CPUID API header implicitly through <asm/processor.h>, transform them to explicitly include <asm/cpuid/api.h> instead. This <asm/processor.h>⇔CPUID-API headers disentanglement is done by patches 1=>19. * Initially (at v1, v2), there were two CPUID parser functions to fill a CPUID table: cpuid_parser_scan_cpu() and cpuid_parser_rescan_cpu(). The latter zeroed-out the CPUID table beforehand, while the former did not. For v3, let the CPUID parser provide only one function where the CPUID table is always zeroed beforehand: cpuid_parser_scan_cpu(), Rationale for this decision is explained at patch 21/44 ("x86/cpuid: Introduce a centralized CPUID parser"), inside cpuid_parser_scan_cpu()'s implementation. * Minimize the code for leaf-specific CPUID parser code by removing some redundant steps: remove initial zeroing of "output->info->nr_entries", remove a static assert, etc. * Drop the v2 patch, ("x86/cpuid: Warn once on invalid CPUID(0x2) iteration count"), from this model v3. On AMD machines with zeroed CPUID(0x2) output, a false warning will be triggered. This is because the CPUID model generic leaves parser has no vendor filtering so far; i.e. all CPUID leaves are queried on all CPU vendors. This keeps the parser simple, but I'll think a bit if adding minimal vendor filtering will be useful for this PQ's next iteration. * Apply more CPUID parser code readability enhancements. * Series is on top of v6.16-rc1. Changelog v2 ~~~~~~~~~~~~ ( [PATCH v2 00/27] x86: Introduce a centralized CPUID data model https://lore.kernel.org/x86-cpuid/20250605192356.82250-1-darwi@linutronix.de ) * Pre-requisite CPUID headers cleanups, requested by Ingo, are now merged: [PATCH v1 0/9] x86/cpuid: Headers cleanup https://lore.kernel.org/lkml/20250508150240.172915-1-darwi@linutronix.de [PATCH v2 0/2] x86/cpuid: Headers cleanup https://lore.kernel.org/lkml/20250515202143.34448-1-darwi@linutronix.de This v2 series is rebased on top of the above restructuring, where the CPUID headers become: include/asm/cpuid/ ├── api.h ├── leaf_types.h // x86-cpuid-db auto-generated file └── types.h * At <asm/cpuid/api.h>, add a clear rational for call sites to use the new API: /* * External APIs for accessing parsed CPUID data: * * Call sites should use below APIs instead of invoking direct CPUID * queries. Benefits include: * * - Return CPUID output as typed C structures that are auto-generated * from a centralized database (see <cpuid/leaf_types.h). Such data * types have a full C99 bitfield layout per CPUID leaf/subleaf * combination. Call sites can thus avoid doing ugly and cryptic * bitwise operations on raw CPUID data. * * - Return cached, per-CPU, CPUID output. Below APIs do not invoke * any CPUID queries, thus avoiding their side effects like * serialization and VM exits. Call-site-specific hard coded * constants and macros for caching CPUID query outputs can also be * avoided. * * - Return sanitized CPUID data. Below APIs return NULL if the given * CPUID leaf/subleaf input is not supported by hardware, or if the * hardware CPUID output was deemed invalid by the CPUID parser. * This centralizes all CPUID data sanitization in one place (the * kernel's CPUID parser.) * * - A centralized global view of system CPUID data. Below APIs will * reflect any kernel-enforced feature masking or overrides, unlike * ad hoc parsing of raw CPUID output by drivers and individual call * sites. */ * Since this model's APIs will be the official kernel CPUID API, free the cpuid_subleaf() and cpuid_leaf() namespace and dedicate it to the model: patch 02/27 ("x86/cpuid: Rename cpuid_leaf()/cpuid_subleaf() APIs") After some local iterative work, I've found below API names to make the most sense. They look "so obvious" now, which is IMHO a good sign. The CPUID model APIs become: /* * For CPUID leaves with static, compile-time, subleaves */ cpuid_subleaf(_cpuinfo, _leaf, _subleaf) cpuid_leaf(_cpuinfo, _leaf) cpuid_leaf_regs(_cpuinfo, _leaf) /* * For CPUID leaves with dynamic subleaves */ cpuid_subleaf_index(_cpuinfo, _leaf, _idx) cpuid_subleaf_index_regs(_cpuinfo, _leaf, _idx) cpuid_subleaf_count(_cpuinfo, _leaf) The difference between the static and dynamic parts of the API is described in detail at patch 04/27 ("x86/cpuid: Introduce a centralized CPUID data model"). In general, all of the above APIs translate to a /single/ assembly instruction offset calculation. For example: const struct leaf_0x7_0 *l7_0; const struct leaf_0x7_1 *l7_1; l7_0 = cpuid_subleaf(c, 0x7, 0); | | └────────┐ | └─────────┐ | * * * &c.cpuid.leaf_0x7_0[0] l7_1 = cpuid_subleaf(c, 0x7, 1); | | └────────┐ | └─────────┐ | * * * &c.cpuid.leaf_0x7_1[0] * Per Ingo's feedback, avoid the "CPUID scanner" terminology and standardize on "CPUID parser". Use the new terminology for all of the relevent data structures, functions, and file names: "cpuid_parser.h", cpuid_parser.c, 'struct cpuid_parse_entry', cpuid_parser_scan_cpu(), cpuid_parser_rescan_cpu(), etc. * Standardize on "__cpuid_leaves_" and "__cpuid_table_" prefixes for all of the <cpuid/api.h> macros that are intended for internal CPUID usage. * Apply multiple code clarity enhancements to the CPUID parser. No change in functionality. * For the series main patch, 04/27 ("x86/cpuid: Introduce a centralized CPUID data model"), expand it with full design and implementation details rational. * Per Sohil's feedback, apply output formatting enhancements to the new CPUID debugfs files x86/cpuid/[0-ncpu]: patch 07/27 ("x86/cpuid: Introduce CPUID parser debugfs interface") * Per Ingo's feedback, (lightly) log the cases where the CPUID parser encounters bogus hardware CPUID data: patch 13/27 ("x86/cpuid: Warn once on invalid CPUID(0x2) iteration count") * Per Ingo's feedback, break CPUID(0x4) call-site patch into: patch 19/27 ("x86/cacheinfo: Pass a 'struct cpuinfo_x86' refrence to CPUID(0x4) code") patch 20/27 ("x86/cacheinfo: Use parsed CPUID(0x4)") * Enhance all of the project's APIs kernel-doc. * Massage all commit logs and code comments for overall clarity. Changelog v1 ~~~~~~~~~~~~ ( [PATCH v1 00/26] x86: Introduce centralized CPUID model https://lore.kernel.org/lkml/20250506050437.10264-1-darwi@linutronix.de ) This series introduces a CPUID model for the x86 subsystem. It is based on top of the CPUID refactorings and bugfixes currently merged at tip:x86/cpu: [PATCH v1 00/40] x86: Leaf 0x2 and leaf 0x4 refactorings https://lore.kernel.org/lkml/20250304085152.51092-1-darwi@linutronix.de [PATCH v4 00/29] x86: Leaf 0x2 and leaf 0x4 refactorings https://lore.kernel.org/lkml/20250324133324.23458-1-darwi@linutronix.de [PATCH v2 0/2] x86/cacheinfo: Fixes for CPUID(0x80000005) and CPUID(0x80000006) https://lore.kernel.org/lkml/20250409122233.1058601-1-darwi@linutronix.de [PATCH v1 0/2] x86: CPUID refactorings: follow-up https://lore.kernel.org/lkml/20250411070401.1358760-1-darwi@linutronix.de [PATCH v3 00/20] tools/x86/kcpuid: Update bitfields to x86-cpuid-db v2.3 https://lore.kernel.org/lkml/20250324142042.29010-1-darwi@linutronix.de First, deploy <asm/cpuid/leaves.h>, as generated by x86-cpuid-db. [*] The header is in the form: /* SPDX-License-Identifier: MIT */ /* Generator: x86-cpuid-db v2.4 */ /* * Leaf 0x0 * Maximum standard leaf number + CPU vendor string */ struct leaf_0x0_0 { u32 max_std_leaf : 32; // Highest standard CPUID leaf supported u32 cpu_vendorid_0 : 32; // CPU vendor ID string bytes 0 - 3 u32 cpu_vendorid_2 : 32; // CPU vendor ID string bytes 8 - 11 u32 cpu_vendorid_1 : 32; // CPU vendor ID string bytes 4 - 7 }; /* * Leaf 0x1 * CPU FMS (Family/Model/Stepping) + standard feature flags */ struct leaf_0x1_0 { // eax u32 stepping : 4, // Stepping ID base_model : 4, // Base CPU model ID base_family_id : 4, // Base CPU family ID ...; // ebx u32 brand_id : 8, // Brand index clflush_size : 8, // CLFLUSH instruction cache line size n_logical_cpu : 8, // Logical CPU count local_apic_id : 8; // Initial local APIC physical ID // ecx ... }; ... where for each 'struct leaf_0xN_M', N is the leaf number and M is the subleaf. The bitfields mirror the x86-cpuid-db kcpuid auto-generated file, as already merged mainline at tools/arch/x86/kcpuid/cpuid.csv. Create a 'struct cpuid_leaves' in <cpuid/types.h> to hold scanned CPUID data: struct cpuid_leaves { struct leaf_0x0_0 leaf_0x0_0[1]; struct leaf_query_info leaf_0x0_0_info; struct leaf_0x1_0 leaf_0x1_0[1]; struct leaf_query_info leaf_0x0_0_info; struct leaf_0x4_0 leaf_0x4_0[8]; struct leaf_query_info leaf_0x4_0_info; ... }; where the 'struct leaf_0xN_M' definitions are auto-generated. Use arrays to handle CPUID leaves with uniform subleaf structures, which is typical for enumerating hierarchical objects; e.g., CPUID(0x4) cache topology enumeration, CPUID(0xd) XSAVE enumeration, CPUID(0x12) SGX enclaves enumeration, and CPUID(0x8000001d) AMD cache enumeration. For each entry in the CPUID table, associate a 'struct leaf_query_info'. It is to be filled for each available CPUID leaf by the generic CPUID scanning logic. Define a 'struct cpuid_table' for caching each CPU's CPUID table, and embed in it a 'struct cpuid_leaves' instance. This way, global table data can also be added. Embed an instance of 'struct cpuid_table' in the 'struct cpuinfo_x86' CPU capability structure(s): struct cpuinfo_x86 { ... struct cpuid_table cpuid_table; ... }; This way, centralized CPUID data can be accessed on early boot using 'boot_cpu_data', and later on a per-CPU basis using the 'cpu_info' per-CPU CPU capability structures. Build the CPUID data in that "struct leaf_0xN_M leaf_0xN_M" format to facilitate direct CPUID table and CPUID bitfields access. Accessing scanned CPUID bitfields can be done using statements like: u32 level = cpudata_cpuid(c, 0x0)->max_std_leaf; const struct leaf_0x1_0 *l1 = cpudata_cpuid(c, 0x1); c->x86_stepping = l1->stepping; c->x86_clflush_size = l1->clflush_size * 8; const struct leaf_0x80000005_0 *el5 = cpudata_cpuid(c, 0x80000005); unsigned assoc = el5->l1_dcache_assoc; unsigned line_size = el5->l1_dcache_line_size; unsigned l1d_index = 0; // CPUID(0x4) subleaf 0: L1 data cache unsigned l1i_index = 1; // CPUID(0x4) subleaf 1: L1 inst cache const struct leaf_0x4_0 *l1d = cpudata_cpuid_index(0x4, l1d_index); const struct leaf_0x4_0 *l1i = cpudata_cpuid_index(0x4, l1i_index); /* Then access l1d->cache_nways, l1d->cache_nsets, ... */ where in the above snippet, 'c' is the CPU's capability structure. Define all macros at <cpuid/table_api.h>, and add proper kernel docs. Beside the model's centralization benefits, this also avoids using the ugly manual bit-fiddling common in a lot of CPUID call sites. The late part of this PQ clearly shows this. As a start, switch the following leaves to scanned CPUID access: CPUID(0x0) CPUID(0x1) CPUID(0x2) CPUID(0x4) CPUID(0x80000000) CPUID(0x80000005) CPUID(0x80000006) CPUID(0x8000001d) With these converted, the entirety of the x86/cacheinfo code is void of any direct CPUID queries. Introduce the debugfs files 'x86/scanned_cpuid/[0-ncpus]' to dump the cached CPUID table for each CPU. This should help with tricky bug reports in the future, if/when the scanned CPUID tables get (unexpectedly) out of sync with actual hardware state. Example output from an Intel Core i5-8250U laptop: $ cat /sys/kernel/debug/x86/scanned_cpuid/cpus/1 Leaf 0x00000000, subleaf 0: cached: EAX=0x00000016 EBX=0x756e6547 ECX=0x6c65746e EDX=0x49656e69 actual: EAX=0x00000016 EBX=0x756e6547 ECX=0x6c65746e EDX=0x49656e69 Leaf 0x00000001, subleaf 0: cached: EAX=0x000806ea EBX=0x02100800 ECX=0x7ffafbbf EDX=0xbfebfbff actual: EAX=0x000806ea EBX=0x02100800 ECX=0x7ffafbbf EDX=0xbfebfbff ... Thanks! 8<----- Ahmed S. Darwish (44): x86/cpuid: Remove transitional <asm/cpuid.h> header ASoC: Intel: avs: Include CPUID header at file scope x86/boot: Reorder sme.c headers alphabetically x86/cpu: Reorder scattered.c headers alphabetically x86/cpu/amd: Reorder headers alphabetically x86/cpu/topology: Reorder headers alphabetically x86/mce: Reorder core.c headers alphabetically x86/paravirt: Reorder headers alphabetically x86/perf/zhaoxin: Reorder headers alphabetically x86/resctrl: Reorder core.c headers alphabetically x86/tdx: Reorder headers alphabetically cpufreq: Reorder headers alphabetically hwmon: (fam15h_power) Reorder headers alphabetically hwmon: (k8temp) Reorder headers alphabetically perf/x86/amd/uncore: Reorder headers alphabetically thermal: intel: Reorder headers alphabetically treewide: Explicitly include <asm/cpuid/api.h> x86/cpuid: Rename cpuid_leaf()/cpuid_subleaf() APIs x86/cpuid: Introduce <asm/cpuid/leaf_types.h> x86/cpuid: Introduce a centralized CPUID data model x86/cpuid: Introduce a centralized CPUID parser x86/cpuid: Parse CPUID(0x80000000) x86/cpuid: Introduce CPUID parser debugfs interface x86/cpu: Use parsed CPUID(0x0) x86/cpu: Use parsed CPUID(0x80000000) x86/lib: Add CPUID(0x1) CPU family and model calculation x86/cpu: Use parsed CPUID(0x1) x86/cpuid: Parse CPUID(0x2) x86/cpuid: Introduce parsed CPUID(0x2) API x86/cpu: Use parsed CPUID(0x2) x86/cacheinfo: Use parsed CPUID(0x2) x86/cpuid: Remove direct CPUID(0x2) query API x86/cpuid: Parse deterministic cache parameters CPUID leaves x86/cacheinfo: Pass a 'struct cpuinfo_x86' refrence to CPUID(0x4) code x86/cacheinfo: Use parsed CPUID(0x4) x86/cacheinfo: Use parsed CPUID(0x8000001d) x86/cpuid: Parse CPUID(0x80000005) and CPUID(0x80000006) x86/cacheinfo: Use auto-generated data types x86/cacheinfo: Use parsed CPUID(0x80000005) and CPUID(0x80000006) x86/amd_nb: Trickle down 'struct cpuinfo_x86' reference x86/cpu: <asm/processor.h>: Do not include CPUID API header x86/cpuid: Use parsed CPUID(0x80000006) x86/cpu: Rescan CPUID table after PSN disable x86/cpu: Rescan CPUID table after unlocking full CPUID range MAINTAINERS | 1 + arch/x86/boot/compressed/pgtable_64.c | 1 + arch/x86/boot/startup/sme.c | 9 +- arch/x86/coco/tdx/tdx.c | 6 +- arch/x86/events/amd/core.c | 2 + arch/x86/events/amd/ibs.c | 1 + arch/x86/events/amd/lbr.c | 2 + arch/x86/events/amd/power.c | 3 + arch/x86/events/amd/uncore.c | 15 +- arch/x86/events/intel/core.c | 1 + arch/x86/events/intel/lbr.c | 1 + arch/x86/events/zhaoxin/core.c | 12 +- arch/x86/include/asm/acrn.h | 2 + arch/x86/include/asm/cpu.h | 6 + arch/x86/include/asm/cpuid.h | 8 - arch/x86/include/asm/cpuid/api.h | 321 ++- arch/x86/include/asm/cpuid/leaf_types.h | 2055 ++++++++++++++++++ arch/x86/include/asm/cpuid/types.h | 117 + arch/x86/include/asm/microcode.h | 1 + arch/x86/include/asm/processor.h | 3 +- arch/x86/include/asm/xen/hypervisor.h | 1 + arch/x86/kernel/amd_nb.c | 9 +- arch/x86/kernel/cpu/Makefile | 3 +- arch/x86/kernel/cpu/amd.c | 21 +- arch/x86/kernel/cpu/cacheinfo.c | 284 +-- arch/x86/kernel/cpu/centaur.c | 1 + arch/x86/kernel/cpu/common.c | 58 +- arch/x86/kernel/cpu/cpuid_debugfs.c | 102 + arch/x86/kernel/cpu/cpuid_parser.c | 201 ++ arch/x86/kernel/cpu/cpuid_parser.h | 109 + arch/x86/kernel/cpu/hygon.c | 1 + arch/x86/kernel/cpu/intel.c | 17 +- arch/x86/kernel/cpu/mce/core.c | 63 +- arch/x86/kernel/cpu/mce/inject.c | 1 + arch/x86/kernel/cpu/resctrl/core.c | 6 +- arch/x86/kernel/cpu/resctrl/monitor.c | 1 + arch/x86/kernel/cpu/scattered.c | 3 +- arch/x86/kernel/cpu/sgx/main.c | 3 + arch/x86/kernel/cpu/topology_amd.c | 3 +- arch/x86/kernel/cpu/topology_common.c | 3 +- arch/x86/kernel/cpu/topology_ext.c | 3 +- arch/x86/kernel/cpu/transmeta.c | 3 + arch/x86/kernel/cpu/zhaoxin.c | 1 + arch/x86/kernel/cpuid.c | 6 +- arch/x86/kernel/paravirt.c | 29 +- arch/x86/kvm/cpuid.h | 3 + arch/x86/kvm/mmu/spte.c | 1 + arch/x86/lib/cpu.c | 41 +- drivers/cpufreq/speedstep-lib.c | 6 +- drivers/firmware/efi/libstub/x86-5lvl.c | 1 + drivers/hwmon/fam15h_power.c | 14 +- drivers/hwmon/k10temp.c | 2 + drivers/hwmon/k8temp.c | 12 +- drivers/thermal/intel/intel_hfi.c | 1 + drivers/thermal/intel/x86_pkg_temp_thermal.c | 15 +- sound/soc/intel/avs/tgl.c | 25 +- 56 files changed, 3215 insertions(+), 405 deletions(-) delete mode 100644 arch/x86/include/asm/cpuid.h create mode 100644 arch/x86/include/asm/cpuid/leaf_types.h create mode 100644 arch/x86/kernel/cpu/cpuid_debugfs.c create mode 100644 arch/x86/kernel/cpu/cpuid_parser.c create mode 100644 arch/x86/kernel/cpu/cpuid_parser.h base-commit: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 -- 2.49.0
Hi, Changelog v2 ~~~~~~~~~~~~ Remove all CPUID includes from <asm/processor.h> since only the upcoming CPUID model needed <asm/processor.h> to include <asm/cpuid/types.h> — not current mainline code. Let arch/x86/kvm/reverse_cpuid.h include <asm/cpuid/types.h> since it references its CPUID_EAX to CPUID_EDX macros. At this series v1, it implicitly included the CPUID types header through <asm/cpufeature.h> through <asm/processor.h>. Drop the "x86/cpuid: Rename cpuid_leaf()/cpuid_subleaf() APIs" patch from this series. After a second look, it should be part of the CPUID model PQ instead. Changelog v1 ~~~~~~~~~~~~ ( [PATCH v1 0/7] x86: Disentangle <asm/processor.h> dependency on CPUID APIs https://lore.kernel.org/lkml/20250612234010.572636-1-darwi@linutronix.de ) This series avoids including the full CPUID API from <asm/processor.h>. That header only needs the CPUID data types and not the full API. Let <asm/processor.h> include <asm/cpuid/types.h> instead of <asm/cpuid/api.h>. Modify all CPUID call sites which implicitly included the CPUID API though <asm/processor.h> to explicitly include <asm/cpuid/api.h> instead. This work prepares for an upcoming v4 of the CPUID model: [PATCH v3 00/44] x86: Introduce a centralized CPUID data model https://lore.kernel.org/lkml/20250612234010.572636-1-darwi@linutronix.de where <asm/cpuid/api.h> needs to include <asm/processor.h>, thus creating a circular dependency if not resolved beforehand… Patches 1->19 of the v3 above had parts of this series circular dependency disentanglement. Per Boris' remarks above, merge the header includes reorderings into two patches only: one patch for x86 and one for drivers. The 0-day bot x86-32 compilation error: Re: [PATCH v3 41/44] x86/cpu: <asm/processor.h>: Do not include CPUID… https://lore.kernel.org/lkml/202506132039.imS2Pflx-lkp@intel.com is also fixed in this series. Beside the call sites converted at CPUID model v3 above, this series also switches below files: arch/x86/kernel/cpu/microcode/core.c arch/x86/kernel/cpu/microcode/intel.c arch/x86/kernel/cpu/mshyperv.c drivers/cpufreq/longrun.c drivers/cpufreq/powernow-k7.c drivers/cpufreq/powernow-k8.c to explicitly include <asm/cpuid/api.h>. Based on v6.16-rc5. Thanks! 8<---- Ahmed S. Darwish (6): x86/cpuid: Remove transitional <asm/cpuid.h> header ASoC: Intel: avs: Include CPUID header at file scope x86: Reorder headers alphabetically drivers: Reorder headers alphabetically treewide: Explicitly include CPUID headers x86/cpu: <asm/processor.h>: Do not include CPUID API header arch/x86/boot/compressed/pgtable_64.c | 1 + arch/x86/boot/startup/sme.c | 9 +-- arch/x86/coco/tdx/tdx.c | 6 +- arch/x86/events/amd/core.c | 2 + arch/x86/events/amd/ibs.c | 1 + arch/x86/events/amd/lbr.c | 2 + arch/x86/events/amd/power.c | 3 + arch/x86/events/amd/uncore.c | 15 ++--- arch/x86/events/intel/core.c | 1 + arch/x86/events/intel/lbr.c | 1 + arch/x86/events/zhaoxin/core.c | 12 ++-- arch/x86/include/asm/acrn.h | 2 + arch/x86/include/asm/cpuid.h | 8 --- arch/x86/include/asm/microcode.h | 1 + arch/x86/include/asm/processor.h | 1 - arch/x86/include/asm/xen/hypervisor.h | 1 + arch/x86/kernel/cpu/amd.c | 26 ++++---- arch/x86/kernel/cpu/centaur.c | 1 + arch/x86/kernel/cpu/hygon.c | 1 + arch/x86/kernel/cpu/mce/core.c | 63 ++++++++++---------- arch/x86/kernel/cpu/mce/inject.c | 1 + arch/x86/kernel/cpu/microcode/core.c | 23 +++---- arch/x86/kernel/cpu/microcode/intel.c | 12 ++-- arch/x86/kernel/cpu/mshyperv.c | 29 +++++---- arch/x86/kernel/cpu/resctrl/core.c | 6 +- arch/x86/kernel/cpu/resctrl/monitor.c | 1 + arch/x86/kernel/cpu/scattered.c | 3 +- arch/x86/kernel/cpu/sgx/main.c | 3 + arch/x86/kernel/cpu/topology_amd.c | 1 + arch/x86/kernel/cpu/topology_common.c | 3 +- arch/x86/kernel/cpu/topology_ext.c | 1 + arch/x86/kernel/cpu/transmeta.c | 3 + arch/x86/kernel/cpu/zhaoxin.c | 1 + arch/x86/kernel/cpuid.c | 1 + arch/x86/kernel/paravirt.c | 29 ++++----- arch/x86/kvm/cpuid.h | 3 + arch/x86/kvm/mmu/spte.c | 1 + arch/x86/kvm/reverse_cpuid.h | 2 + drivers/cpufreq/longrun.c | 7 ++- drivers/cpufreq/powernow-k7.c | 14 ++--- drivers/cpufreq/powernow-k8.c | 17 +++--- drivers/cpufreq/speedstep-lib.c | 6 +- drivers/firmware/efi/libstub/x86-5lvl.c | 1 + drivers/hwmon/fam15h_power.c | 14 +++-- drivers/hwmon/k10temp.c | 2 + drivers/hwmon/k8temp.c | 12 ++-- drivers/thermal/intel/intel_hfi.c | 1 + drivers/thermal/intel/x86_pkg_temp_thermal.c | 15 ++--- sound/soc/intel/avs/tgl.c | 25 +++++--- 49 files changed, 229 insertions(+), 165 deletions(-) delete mode 100644 arch/x86/include/asm/cpuid.h base-commit: d7b8f8e20813f0179d8ef519541a3527e7661d3a -- 2.49.0
On Wed, 09 Jul 2025, Ahmed S. Darwish wrote: > > Changelog v2 > ~~~~~~~~~~~~ > Sorry, not my best day. This was meant as a reply to another PQ. Kindly ignore this and check instead: [PATCH v2 0/6] x86: Disentangle <asm/processor.h> dependency on CPUID headers https://lore.kernel.org/lkml/20250709203033.90125-1-darwi@linutronix.de Thanks, -- Ahmed S. Darwish Linutronix GmbH
All CPUID call sites were updated at commit:
968e30006807 ("x86/cpuid: Set <asm/cpuid/api.h> as the main CPUID header")
to include <asm/cpuid/api.h> instead of <asm/cpuid.h>.
The <asm/cpuid.h> header was still retained as a wrapper, just in case
some new code in -next started using it. Now that everything is merged
to Linus' tree, remove the header.
Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
---
arch/x86/include/asm/cpuid.h | 8 --------
1 file changed, 8 deletions(-)
delete mode 100644 arch/x86/include/asm/cpuid.h
diff --git a/arch/x86/include/asm/cpuid.h b/arch/x86/include/asm/cpuid.h
deleted file mode 100644
index d5749b25fa10..000000000000
--- a/arch/x86/include/asm/cpuid.h
+++ /dev/null
@@ -1,8 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-
-#ifndef _ASM_X86_CPUID_H
-#define _ASM_X86_CPUID_H
-
-#include <asm/cpuid/api.h>
-
-#endif /* _ASM_X86_CPUID_H */
--
2.49.0
Commit
cbe37a4d2b3c ("ASoC: Intel: avs: Configure basefw on TGL-based platforms")
includes the main CPUID header from within a C function. This works by
luck and forbids valid refactorings inside the CPUID header.
Include the CPUID header at file scope instead.
Note, for the CPUID(0x15) leaf number, use CPUID_LEAF_TSC instead of
defining a custom local macro for it.
Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
Acked-by: Cezary Rojewski <cezary.rojewski@intel.com>
---
sound/soc/intel/avs/tgl.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/sound/soc/intel/avs/tgl.c b/sound/soc/intel/avs/tgl.c
index 9dbb3ad0954a..cf19d3a7ced2 100644
--- a/sound/soc/intel/avs/tgl.c
+++ b/sound/soc/intel/avs/tgl.c
@@ -10,8 +10,6 @@
#include "avs.h"
#include "messages.h"
-#define CPUID_TSC_LEAF 0x15
-
static int avs_tgl_dsp_core_power(struct avs_dev *adev, u32 core_mask, bool power)
{
core_mask &= AVS_MAIN_CORE_MASK;
@@ -39,22 +37,31 @@ static int avs_tgl_dsp_core_stall(struct avs_dev *adev, u32 core_mask, bool stal
return avs_dsp_core_stall(adev, core_mask, stall);
}
+#ifdef CONFIG_X86
+#include <asm/cpuid/api.h>
+static unsigned int intel_crystal_freq_hz(void)
+{
+ return cpuid_ecx(CPUID_LEAF_TSC);
+}
+#else
+static unsigned int intel_crystal_freq_hz(void)
+{
+ return 0;
+}
+#endif /* !CONFIG_X86 */
+
static int avs_tgl_config_basefw(struct avs_dev *adev)
{
+ unsigned int freq = intel_crystal_freq_hz();
struct pci_dev *pci = adev->base.pci;
struct avs_bus_hwid hwid;
int ret;
-#ifdef CONFIG_X86
- unsigned int ecx;
-#include <asm/cpuid/api.h>
- ecx = cpuid_ecx(CPUID_TSC_LEAF);
- if (ecx) {
- ret = avs_ipc_set_fw_config(adev, 1, AVS_FW_CFG_XTAL_FREQ_HZ, sizeof(ecx), &ecx);
+ if (freq) {
+ ret = avs_ipc_set_fw_config(adev, 1, AVS_FW_CFG_XTAL_FREQ_HZ, sizeof(freq), &freq);
if (ret)
return AVS_IPC_RET(ret);
}
-#endif
hwid.device = pci->device;
hwid.subsystem = pci->subsystem_vendor | (pci->subsystem_device << 16);
--
2.49.0
Multiple x86 source files use the cpuid_*() macros, but implicitly
include the main CPUID API header through <asm/processor.h> instead.
Sort their include lines so that <asm/cpuid/api.h> can be explicitly
included next.
Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
---
arch/x86/boot/startup/sme.c | 8 ++--
arch/x86/coco/tdx/tdx.c | 5 ++-
arch/x86/events/amd/uncore.c | 14 +++---
arch/x86/events/zhaoxin/core.c | 11 +++--
arch/x86/kernel/cpu/amd.c | 25 +++++------
arch/x86/kernel/cpu/mce/core.c | 62 +++++++++++++--------------
arch/x86/kernel/cpu/microcode/core.c | 22 +++++-----
arch/x86/kernel/cpu/microcode/intel.c | 11 ++---
arch/x86/kernel/cpu/mshyperv.c | 28 ++++++------
arch/x86/kernel/cpu/resctrl/core.c | 5 ++-
arch/x86/kernel/cpu/scattered.c | 2 +-
arch/x86/kernel/cpu/topology_common.c | 2 +-
arch/x86/kernel/paravirt.c | 28 ++++++------
13 files changed, 114 insertions(+), 109 deletions(-)
diff --git a/arch/x86/boot/startup/sme.c b/arch/x86/boot/startup/sme.c
index 70ea1748c0a7..922b236be02f 100644
--- a/arch/x86/boot/startup/sme.c
+++ b/arch/x86/boot/startup/sme.c
@@ -34,15 +34,15 @@
*/
#define USE_EARLY_PGTABLE_L5
+#include <linux/cc_platform.h>
#include <linux/kernel.h>
-#include <linux/mm.h>
#include <linux/mem_encrypt.h>
-#include <linux/cc_platform.h>
+#include <linux/mm.h>
+#include <asm/coco.h>
#include <asm/init.h>
-#include <asm/setup.h>
#include <asm/sections.h>
-#include <asm/coco.h>
+#include <asm/setup.h>
#include <asm/sev.h>
#define PGD_FLAGS _KERNPG_TABLE_NOENC
diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c
index 7b2833705d47..7bc11836c46a 100644
--- a/arch/x86/coco/tdx/tdx.c
+++ b/arch/x86/coco/tdx/tdx.c
@@ -8,16 +8,17 @@
#include <linux/export.h>
#include <linux/io.h>
#include <linux/kexec.h>
+
#include <asm/coco.h>
-#include <asm/tdx.h>
-#include <asm/vmx.h>
#include <asm/ia32.h>
#include <asm/insn.h>
#include <asm/insn-eval.h>
#include <asm/paravirt_types.h>
#include <asm/pgtable.h>
#include <asm/set_memory.h>
+#include <asm/tdx.h>
#include <asm/traps.h>
+#include <asm/vmx.h>
/* MMIO direction */
#define EPT_READ 0
diff --git a/arch/x86/events/amd/uncore.c b/arch/x86/events/amd/uncore.c
index e8b6af199c73..c1483ef16c0b 100644
--- a/arch/x86/events/amd/uncore.c
+++ b/arch/x86/events/amd/uncore.c
@@ -5,18 +5,18 @@
* Author: Jacob Shin <jacob.shin@amd.com>
*/
-#include <linux/perf_event.h>
-#include <linux/percpu.h>
-#include <linux/types.h>
-#include <linux/slab.h>
-#include <linux/init.h>
#include <linux/cpu.h>
-#include <linux/cpumask.h>
#include <linux/cpufeature.h>
+#include <linux/cpumask.h>
+#include <linux/init.h>
+#include <linux/percpu.h>
+#include <linux/perf_event.h>
+#include <linux/slab.h>
#include <linux/smp.h>
+#include <linux/types.h>
-#include <asm/perf_event.h>
#include <asm/msr.h>
+#include <asm/perf_event.h>
#define NUM_COUNTERS_NB 4
#define NUM_COUNTERS_L2 4
diff --git a/arch/x86/events/zhaoxin/core.c b/arch/x86/events/zhaoxin/core.c
index 4bdfcf091200..d59992364880 100644
--- a/arch/x86/events/zhaoxin/core.c
+++ b/arch/x86/events/zhaoxin/core.c
@@ -5,16 +5,16 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-#include <linux/stddef.h>
-#include <linux/types.h>
-#include <linux/init.h>
-#include <linux/slab.h>
#include <linux/export.h>
+#include <linux/init.h>
#include <linux/nmi.h>
+#include <linux/slab.h>
+#include <linux/stddef.h>
+#include <linux/types.h>
+#include <asm/apic.h>
#include <asm/cpufeature.h>
#include <asm/hardirq.h>
-#include <asm/apic.h>
#include <asm/msr.h>
#include "../perf_event.h"
@@ -616,4 +616,3 @@ __init int zhaoxin_pmu_init(void)
return 0;
}
-
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index 655f44f89ded..6e2ee9ed76d2 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -1,32 +1,33 @@
// SPDX-License-Identifier: GPL-2.0-only
-#include <linux/export.h>
+
#include <linux/bitops.h>
#include <linux/elf.h>
-#include <linux/mm.h>
-
+#include <linux/export.h>
#include <linux/io.h>
+#include <linux/mm.h>
+#include <linux/platform_data/x86/amd-fch.h>
+#include <linux/random.h>
#include <linux/sched.h>
#include <linux/sched/clock.h>
-#include <linux/random.h>
#include <linux/topology.h>
-#include <linux/platform_data/x86/amd-fch.h>
-#include <asm/processor.h>
+
#include <asm/apic.h>
#include <asm/cacheinfo.h>
#include <asm/cpu.h>
#include <asm/cpu_device_id.h>
-#include <asm/spec-ctrl.h>
-#include <asm/smp.h>
+#include <asm/debugreg.h>
+#include <asm/delay.h>
+#include <asm/msr.h>
#include <asm/numa.h>
#include <asm/pci-direct.h>
-#include <asm/delay.h>
-#include <asm/debugreg.h>
+#include <asm/processor.h>
#include <asm/resctrl.h>
-#include <asm/msr.h>
#include <asm/sev.h>
+#include <asm/smp.h>
+#include <asm/spec-ctrl.h>
#ifdef CONFIG_X86_64
-# include <asm/mmconfig.h>
+#include <asm/mmconfig.h>
#endif
#include "cpu.h"
diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c
index 4da4eab56c81..5a11c522ea97 100644
--- a/arch/x86/kernel/cpu/mce/core.c
+++ b/arch/x86/kernel/cpu/mce/core.c
@@ -9,52 +9,52 @@
* Author: Andi Kleen
*/
-#include <linux/thread_info.h>
#include <linux/capability.h>
-#include <linux/miscdevice.h>
-#include <linux/ratelimit.h>
-#include <linux/rcupdate.h>
-#include <linux/kobject.h>
-#include <linux/uaccess.h>
-#include <linux/kdebug.h>
-#include <linux/kernel.h>
-#include <linux/percpu.h>
-#include <linux/string.h>
-#include <linux/device.h>
-#include <linux/syscore_ops.h>
-#include <linux/delay.h>
+#include <linux/cpu.h>
#include <linux/ctype.h>
-#include <linux/sched.h>
-#include <linux/sysfs.h>
-#include <linux/types.h>
-#include <linux/slab.h>
+#include <linux/debugfs.h>
+#include <linux/delay.h>
+#include <linux/device.h>
+#include <linux/export.h>
+#include <linux/fs.h>
+#include <linux/hardirq.h>
#include <linux/init.h>
+#include <linux/irq_work.h>
+#include <linux/kdebug.h>
+#include <linux/kernel.h>
+#include <linux/kexec.h>
#include <linux/kmod.h>
-#include <linux/poll.h>
+#include <linux/kobject.h>
+#include <linux/miscdevice.h>
+#include <linux/mm.h>
#include <linux/nmi.h>
-#include <linux/cpu.h>
+#include <linux/percpu.h>
+#include <linux/poll.h>
#include <linux/ras.h>
-#include <linux/smp.h>
-#include <linux/fs.h>
-#include <linux/mm.h>
-#include <linux/debugfs.h>
-#include <linux/irq_work.h>
-#include <linux/export.h>
+#include <linux/ratelimit.h>
+#include <linux/rcupdate.h>
+#include <linux/sched.h>
#include <linux/set_memory.h>
+#include <linux/slab.h>
+#include <linux/smp.h>
+#include <linux/string.h>
#include <linux/sync_core.h>
+#include <linux/syscore_ops.h>
+#include <linux/sysfs.h>
#include <linux/task_work.h>
-#include <linux/hardirq.h>
-#include <linux/kexec.h>
+#include <linux/thread_info.h>
+#include <linux/types.h>
+#include <linux/uaccess.h>
-#include <asm/fred.h>
#include <asm/cpu_device_id.h>
-#include <asm/processor.h>
-#include <asm/traps.h>
-#include <asm/tlbflush.h>
+#include <asm/fred.h>
#include <asm/mce.h>
#include <asm/msr.h>
+#include <asm/processor.h>
#include <asm/reboot.h>
#include <asm/tdx.h>
+#include <asm/tlbflush.h>
+#include <asm/traps.h>
#include "internal.h"
diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
index fe50eb5b7c4a..9243ed3ded85 100644
--- a/arch/x86/kernel/cpu/microcode/core.c
+++ b/arch/x86/kernel/cpu/microcode/core.c
@@ -17,27 +17,27 @@
#define pr_fmt(fmt) "microcode: " fmt
-#include <linux/platform_device.h>
-#include <linux/stop_machine.h>
-#include <linux/syscore_ops.h>
-#include <linux/miscdevice.h>
#include <linux/capability.h>
-#include <linux/firmware.h>
+#include <linux/cpu.h>
#include <linux/cpumask.h>
-#include <linux/kernel.h>
#include <linux/delay.h>
-#include <linux/mutex.h>
-#include <linux/cpu.h>
-#include <linux/nmi.h>
+#include <linux/firmware.h>
#include <linux/fs.h>
+#include <linux/kernel.h>
+#include <linux/miscdevice.h>
#include <linux/mm.h>
+#include <linux/mutex.h>
+#include <linux/nmi.h>
+#include <linux/platform_device.h>
+#include <linux/stop_machine.h>
+#include <linux/syscore_ops.h>
#include <asm/apic.h>
+#include <asm/cmdline.h>
#include <asm/cpu_device_id.h>
+#include <asm/msr.h>
#include <asm/perf_event.h>
#include <asm/processor.h>
-#include <asm/cmdline.h>
-#include <asm/msr.h>
#include <asm/setup.h>
#include "internal.h"
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
index 371ca6eac00e..99fda8f7dba7 100644
--- a/arch/x86/kernel/cpu/microcode/intel.c
+++ b/arch/x86/kernel/cpu/microcode/intel.c
@@ -11,21 +11,22 @@
* H Peter Anvin" <hpa@zytor.com>
*/
#define pr_fmt(fmt) "microcode: " fmt
+
+#include <linux/cpu.h>
#include <linux/earlycpio.h>
#include <linux/firmware.h>
-#include <linux/uaccess.h>
#include <linux/initrd.h>
#include <linux/kernel.h>
+#include <linux/mm.h>
#include <linux/slab.h>
-#include <linux/cpu.h>
+#include <linux/uaccess.h>
#include <linux/uio.h>
-#include <linux/mm.h>
#include <asm/cpu_device_id.h>
+#include <asm/msr.h>
#include <asm/processor.h>
-#include <asm/tlbflush.h>
#include <asm/setup.h>
-#include <asm/msr.h>
+#include <asm/tlbflush.h>
#include "internal.h"
diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index c78f860419d6..d0491bba9e30 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -6,33 +6,35 @@
* Author : K. Y. Srinivasan <ksrinivasan@novell.com>
*/
-#include <linux/types.h>
-#include <linux/time.h>
#include <linux/clocksource.h>
-#include <linux/init.h>
+#include <linux/efi.h>
#include <linux/export.h>
#include <linux/hardirq.h>
-#include <linux/efi.h>
+#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/kexec.h>
#include <linux/random.h>
-#include <asm/processor.h>
-#include <asm/hypervisor.h>
+#include <linux/time.h>
+#include <linux/types.h>
+
+#include <clocksource/hyperv_timer.h>
#include <hyperv/hvhdk.h>
-#include <asm/mshyperv.h>
+
+#include <asm/apic.h>
#include <asm/desc.h>
+#include <asm/hypervisor.h>
+#include <asm/i8259.h>
#include <asm/idtentry.h>
#include <asm/irq_regs.h>
-#include <asm/i8259.h>
-#include <asm/apic.h>
-#include <asm/timer.h>
-#include <asm/reboot.h>
-#include <asm/nmi.h>
-#include <clocksource/hyperv_timer.h>
+#include <asm/mshyperv.h>
#include <asm/msr.h>
+#include <asm/nmi.h>
#include <asm/numa.h>
+#include <asm/processor.h>
+#include <asm/reboot.h>
#include <asm/svm.h>
+#include <asm/timer.h>
/* Is Linux running on nested Microsoft Hypervisor */
bool hv_nested;
diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
index 187d527ef73b..35285567beec 100644
--- a/arch/x86/kernel/cpu/resctrl/core.c
+++ b/arch/x86/kernel/cpu/resctrl/core.c
@@ -17,13 +17,14 @@
#define pr_fmt(fmt) "resctrl: " fmt
#include <linux/cpu.h>
-#include <linux/slab.h>
-#include <linux/err.h>
#include <linux/cpuhotplug.h>
+#include <linux/err.h>
+#include <linux/slab.h>
#include <asm/cpu_device_id.h>
#include <asm/msr.h>
#include <asm/resctrl.h>
+
#include "internal.h"
/*
diff --git a/arch/x86/kernel/cpu/scattered.c b/arch/x86/kernel/cpu/scattered.c
index dbf6d71bdf18..3d23b943f596 100644
--- a/arch/x86/kernel/cpu/scattered.c
+++ b/arch/x86/kernel/cpu/scattered.c
@@ -4,8 +4,8 @@
*/
#include <linux/cpu.h>
-#include <asm/memtype.h>
#include <asm/apic.h>
+#include <asm/memtype.h>
#include <asm/processor.h>
#include "cpu.h"
diff --git a/arch/x86/kernel/cpu/topology_common.c b/arch/x86/kernel/cpu/topology_common.c
index b5a5e1411469..48c47d02d8a9 100644
--- a/arch/x86/kernel/cpu/topology_common.c
+++ b/arch/x86/kernel/cpu/topology_common.c
@@ -3,8 +3,8 @@
#include <xen/xen.h>
-#include <asm/intel-family.h>
#include <asm/apic.h>
+#include <asm/intel-family.h>
#include <asm/processor.h>
#include <asm/smp.h>
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
index ab3e172dcc69..3d745cd25a43 100644
--- a/arch/x86/kernel/paravirt.c
+++ b/arch/x86/kernel/paravirt.c
@@ -6,34 +6,34 @@
2007 - x86_64 support added by Glauber de Oliveira Costa, Red Hat Inc
*/
+#include <linux/bcd.h>
+#include <linux/efi.h>
#include <linux/errno.h>
-#include <linux/init.h>
#include <linux/export.h>
-#include <linux/efi.h>
-#include <linux/bcd.h>
#include <linux/highmem.h>
+#include <linux/init.h>
#include <linux/kprobes.h>
#include <linux/pgtable.h>
#include <linux/static_call.h>
+#include <asm/apic.h>
#include <asm/bug.h>
-#include <asm/paravirt.h>
#include <asm/debugreg.h>
+#include <asm/delay.h>
#include <asm/desc.h>
+#include <asm/fixmap.h>
+#include <asm/gsseg.h>
+#include <asm/io_bitmap.h>
+#include <asm/irq.h>
+#include <asm/msr.h>
+#include <asm/paravirt.h>
+#include <asm/pgalloc.h>
#include <asm/setup.h>
+#include <asm/special_insns.h>
#include <asm/time.h>
-#include <asm/pgalloc.h>
-#include <asm/irq.h>
-#include <asm/delay.h>
-#include <asm/fixmap.h>
-#include <asm/apic.h>
-#include <asm/tlbflush.h>
#include <asm/timer.h>
-#include <asm/special_insns.h>
#include <asm/tlb.h>
-#include <asm/io_bitmap.h>
-#include <asm/gsseg.h>
-#include <asm/msr.h>
+#include <asm/tlbflush.h>
/* stub always returning 0. */
DEFINE_ASM_FUNC(paravirt_ret0, "xor %eax,%eax", .entry.text);
--
2.49.0
Multiple drivers use the cpuid_*() macros, but implicitly include the
main CPUID header through <asm/processor.h> instead.
Sort their include lines so that <asm/cpuid/api.h> can be explicitly
included next.
Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
---
drivers/cpufreq/longrun.c | 6 +++---
drivers/cpufreq/powernow-k7.c | 13 ++++++-------
drivers/cpufreq/powernow-k8.c | 16 ++++++++--------
drivers/cpufreq/speedstep-lib.c | 5 +++--
drivers/hwmon/fam15h_power.c | 13 +++++++------
drivers/hwmon/k8temp.c | 11 ++++++-----
drivers/thermal/intel/x86_pkg_temp_thermal.c | 14 +++++++-------
7 files changed, 40 insertions(+), 38 deletions(-)
diff --git a/drivers/cpufreq/longrun.c b/drivers/cpufreq/longrun.c
index 1caaec7c280b..263c48b8f628 100644
--- a/drivers/cpufreq/longrun.c
+++ b/drivers/cpufreq/longrun.c
@@ -5,15 +5,15 @@
* BIG FAT DISCLAIMER: Work in progress code. Possibly *dangerous*
*/
+#include <linux/cpufreq.h>
+#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/cpufreq.h>
#include <linux/timex.h>
+#include <asm/cpu_device_id.h>
#include <asm/msr.h>
#include <asm/processor.h>
-#include <asm/cpu_device_id.h>
static struct cpufreq_driver longrun_driver;
diff --git a/drivers/cpufreq/powernow-k7.c b/drivers/cpufreq/powernow-k7.c
index 31039330a3ba..0608040fcd1e 100644
--- a/drivers/cpufreq/powernow-k7.c
+++ b/drivers/cpufreq/powernow-k7.c
@@ -15,20 +15,20 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#include <linux/cpufreq.h>
+#include <linux/dmi.h>
+#include <linux/init.h>
+#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
-#include <linux/init.h>
-#include <linux/cpufreq.h>
#include <linux/slab.h>
#include <linux/string.h>
-#include <linux/dmi.h>
#include <linux/timex.h>
-#include <linux/io.h>
-#include <asm/timer.h> /* Needed for recalibrate_cpu_khz() */
-#include <asm/msr.h>
#include <asm/cpu_device_id.h>
+#include <asm/msr.h>
+#include <asm/timer.h> /* Needed for recalibrate_cpu_khz() */
#ifdef CONFIG_X86_POWERNOW_K7_ACPI
#include <linux/acpi.h>
@@ -691,4 +691,3 @@ MODULE_LICENSE("GPL");
late_initcall(powernow_init);
module_exit(powernow_exit);
-
diff --git a/drivers/cpufreq/powernow-k8.c b/drivers/cpufreq/powernow-k8.c
index f7512b4e923e..2b5cdd8f1c0a 100644
--- a/drivers/cpufreq/powernow-k8.c
+++ b/drivers/cpufreq/powernow-k8.c
@@ -26,22 +26,22 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#include <linux/acpi.h>
+#include <linux/cpufreq.h>
+#include <linux/cpumask.h>
+#include <linux/delay.h>
+#include <linux/init.h>
+#include <linux/io.h>
#include <linux/kernel.h>
-#include <linux/smp.h>
#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/cpufreq.h>
+#include <linux/mutex.h>
#include <linux/slab.h>
+#include <linux/smp.h>
#include <linux/string.h>
-#include <linux/cpumask.h>
-#include <linux/io.h>
-#include <linux/delay.h>
#include <asm/msr.h>
#include <asm/cpu_device_id.h>
-#include <linux/acpi.h>
-#include <linux/mutex.h>
#include <acpi/processor.h>
#define VERSION "version 2.20.00"
diff --git a/drivers/cpufreq/speedstep-lib.c b/drivers/cpufreq/speedstep-lib.c
index 0b66df4ed513..f08817331aec 100644
--- a/drivers/cpufreq/speedstep-lib.c
+++ b/drivers/cpufreq/speedstep-lib.c
@@ -9,14 +9,15 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#include <linux/cpufreq.h>
+#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
-#include <linux/init.h>
-#include <linux/cpufreq.h>
#include <asm/msr.h>
#include <asm/tsc.h>
+
#include "speedstep-lib.h"
#define PFX "speedstep-lib: "
diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c
index 8ecebea53651..5a5674e85f63 100644
--- a/drivers/hwmon/fam15h_power.c
+++ b/drivers/hwmon/fam15h_power.c
@@ -6,20 +6,21 @@
* Author: Andreas Herrmann <herrmann.der.user@googlemail.com>
*/
+#include <linux/bitops.h>
+#include <linux/cpu.h>
+#include <linux/cpumask.h>
#include <linux/err.h>
-#include <linux/hwmon.h>
#include <linux/hwmon-sysfs.h>
+#include <linux/hwmon.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/pci.h>
-#include <linux/bitops.h>
-#include <linux/cpu.h>
-#include <linux/cpumask.h>
-#include <linux/time.h>
#include <linux/sched.h>
+#include <linux/time.h>
#include <linux/topology.h>
-#include <asm/processor.h>
+
#include <asm/msr.h>
+#include <asm/processor.h>
MODULE_DESCRIPTION("AMD Family 15h CPU processor power monitor");
MODULE_AUTHOR("Andreas Herrmann <herrmann.der.user@googlemail.com>");
diff --git a/drivers/hwmon/k8temp.c b/drivers/hwmon/k8temp.c
index 2b80ac410cd1..8c1efce9a04b 100644
--- a/drivers/hwmon/k8temp.c
+++ b/drivers/hwmon/k8temp.c
@@ -7,13 +7,14 @@
* Inspired from the w83785 and amd756 drivers.
*/
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/slab.h>
-#include <linux/pci.h>
-#include <linux/hwmon.h>
#include <linux/err.h>
+#include <linux/hwmon.h>
+#include <linux/init.h>
+#include <linux/module.h>
#include <linux/mutex.h>
+#include <linux/pci.h>
+#include <linux/slab.h>
+
#include <asm/processor.h>
#define TEMP_FROM_REG(val) (((((val) >> 16) & 0xff) - 49) * 1000)
diff --git a/drivers/thermal/intel/x86_pkg_temp_thermal.c b/drivers/thermal/intel/x86_pkg_temp_thermal.c
index 3fc679b6f11b..c843cb5fc5c3 100644
--- a/drivers/thermal/intel/x86_pkg_temp_thermal.c
+++ b/drivers/thermal/intel/x86_pkg_temp_thermal.c
@@ -5,19 +5,19 @@
*/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-#include <linux/module.h>
+#include <linux/cpu.h>
+#include <linux/debugfs.h>
+#include <linux/device.h>
+#include <linux/err.h>
#include <linux/init.h>
#include <linux/intel_tcc.h>
-#include <linux/err.h>
+#include <linux/module.h>
#include <linux/param.h>
-#include <linux/device.h>
#include <linux/platform_device.h>
-#include <linux/cpu.h>
-#include <linux/smp.h>
-#include <linux/slab.h>
#include <linux/pm.h>
+#include <linux/slab.h>
+#include <linux/smp.h>
#include <linux/thermal.h>
-#include <linux/debugfs.h>
#include <asm/cpu_device_id.h>
#include <asm/msr.h>
--
2.49.0
Modify all CPUID call sites which implicitly include any of the CPUID
headers through <asm/processor.h> to explicitly include the CPUID headers
instead.
This allows disentangling <asm/cpuid/api.h> and <asm/cpuid/types.h> from
<asm/processor.h> at a later step.
Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
---
arch/x86/boot/compressed/pgtable_64.c | 1 +
arch/x86/boot/startup/sme.c | 1 +
arch/x86/coco/tdx/tdx.c | 1 +
arch/x86/events/amd/core.c | 2 ++
arch/x86/events/amd/ibs.c | 1 +
arch/x86/events/amd/lbr.c | 2 ++
arch/x86/events/amd/power.c | 3 +++
arch/x86/events/amd/uncore.c | 1 +
arch/x86/events/intel/core.c | 1 +
arch/x86/events/intel/lbr.c | 1 +
arch/x86/events/zhaoxin/core.c | 1 +
arch/x86/include/asm/acrn.h | 2 ++
arch/x86/include/asm/microcode.h | 1 +
arch/x86/include/asm/xen/hypervisor.h | 1 +
arch/x86/kernel/cpu/amd.c | 1 +
arch/x86/kernel/cpu/centaur.c | 1 +
arch/x86/kernel/cpu/hygon.c | 1 +
arch/x86/kernel/cpu/mce/core.c | 1 +
arch/x86/kernel/cpu/mce/inject.c | 1 +
arch/x86/kernel/cpu/microcode/core.c | 1 +
arch/x86/kernel/cpu/microcode/intel.c | 1 +
arch/x86/kernel/cpu/mshyperv.c | 1 +
arch/x86/kernel/cpu/resctrl/core.c | 1 +
arch/x86/kernel/cpu/resctrl/monitor.c | 1 +
arch/x86/kernel/cpu/scattered.c | 1 +
arch/x86/kernel/cpu/sgx/main.c | 3 +++
arch/x86/kernel/cpu/topology_amd.c | 1 +
arch/x86/kernel/cpu/topology_common.c | 1 +
arch/x86/kernel/cpu/topology_ext.c | 1 +
arch/x86/kernel/cpu/transmeta.c | 3 +++
arch/x86/kernel/cpu/zhaoxin.c | 1 +
arch/x86/kernel/cpuid.c | 1 +
arch/x86/kernel/paravirt.c | 1 +
arch/x86/kvm/cpuid.h | 3 +++
arch/x86/kvm/mmu/spte.c | 1 +
arch/x86/kvm/reverse_cpuid.h | 2 ++
drivers/cpufreq/longrun.c | 1 +
drivers/cpufreq/powernow-k7.c | 1 +
drivers/cpufreq/powernow-k8.c | 1 +
drivers/cpufreq/speedstep-lib.c | 1 +
drivers/firmware/efi/libstub/x86-5lvl.c | 1 +
drivers/hwmon/fam15h_power.c | 1 +
drivers/hwmon/k10temp.c | 2 ++
drivers/hwmon/k8temp.c | 1 +
drivers/thermal/intel/intel_hfi.c | 1 +
drivers/thermal/intel/x86_pkg_temp_thermal.c | 1 +
46 files changed, 59 insertions(+)
diff --git a/arch/x86/boot/compressed/pgtable_64.c b/arch/x86/boot/compressed/pgtable_64.c
index bdd26050dff7..d94d98595780 100644
--- a/arch/x86/boot/compressed/pgtable_64.c
+++ b/arch/x86/boot/compressed/pgtable_64.c
@@ -2,6 +2,7 @@
#include "misc.h"
#include <asm/bootparam.h>
#include <asm/bootparam_utils.h>
+#include <asm/cpuid/api.h>
#include <asm/e820/types.h>
#include <asm/processor.h>
#include "../string.h"
diff --git a/arch/x86/boot/startup/sme.c b/arch/x86/boot/startup/sme.c
index 922b236be02f..6a58ab568390 100644
--- a/arch/x86/boot/startup/sme.c
+++ b/arch/x86/boot/startup/sme.c
@@ -40,6 +40,7 @@
#include <linux/mm.h>
#include <asm/coco.h>
+#include <asm/cpuid/api.h>
#include <asm/init.h>
#include <asm/sections.h>
#include <asm/setup.h>
diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c
index 7bc11836c46a..4ed8ec642646 100644
--- a/arch/x86/coco/tdx/tdx.c
+++ b/arch/x86/coco/tdx/tdx.c
@@ -10,6 +10,7 @@
#include <linux/kexec.h>
#include <asm/coco.h>
+#include <asm/cpuid/api.h>
#include <asm/ia32.h>
#include <asm/insn.h>
#include <asm/insn-eval.h>
diff --git a/arch/x86/events/amd/core.c b/arch/x86/events/amd/core.c
index b20661b8621d..d28d45ceb707 100644
--- a/arch/x86/events/amd/core.c
+++ b/arch/x86/events/amd/core.c
@@ -7,8 +7,10 @@
#include <linux/slab.h>
#include <linux/delay.h>
#include <linux/jiffies.h>
+
#include <asm/apicdef.h>
#include <asm/apic.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include <asm/nmi.h>
diff --git a/arch/x86/events/amd/ibs.c b/arch/x86/events/amd/ibs.c
index 112f43b23ebf..0c7848e6149e 100644
--- a/arch/x86/events/amd/ibs.c
+++ b/arch/x86/events/amd/ibs.c
@@ -15,6 +15,7 @@
#include <linux/sched/clock.h>
#include <asm/apic.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include "../perf_event.h"
diff --git a/arch/x86/events/amd/lbr.c b/arch/x86/events/amd/lbr.c
index d24da377df77..5b437dc8e4ce 100644
--- a/arch/x86/events/amd/lbr.c
+++ b/arch/x86/events/amd/lbr.c
@@ -1,5 +1,7 @@
// SPDX-License-Identifier: GPL-2.0
#include <linux/perf_event.h>
+
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include <asm/perf_event.h>
diff --git a/arch/x86/events/amd/power.c b/arch/x86/events/amd/power.c
index dad42790cf7d..744dffa42dee 100644
--- a/arch/x86/events/amd/power.c
+++ b/arch/x86/events/amd/power.c
@@ -10,8 +10,11 @@
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/perf_event.h>
+
#include <asm/cpu_device_id.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
+
#include "../perf_event.h"
/* Event code: LSB 8 bits, passed in attr->config any other bit is reserved. */
diff --git a/arch/x86/events/amd/uncore.c b/arch/x86/events/amd/uncore.c
index c1483ef16c0b..5261f12007df 100644
--- a/arch/x86/events/amd/uncore.c
+++ b/arch/x86/events/amd/uncore.c
@@ -15,6 +15,7 @@
#include <linux/smp.h>
#include <linux/types.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include <asm/perf_event.h>
diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
index c2fb729c270e..ebbcdf82b494 100644
--- a/arch/x86/events/intel/core.c
+++ b/arch/x86/events/intel/core.c
@@ -17,6 +17,7 @@
#include <linux/kvm_host.h>
#include <asm/cpufeature.h>
+#include <asm/cpuid/api.h>
#include <asm/debugreg.h>
#include <asm/hardirq.h>
#include <asm/intel-family.h>
diff --git a/arch/x86/events/intel/lbr.c b/arch/x86/events/intel/lbr.c
index 7aa59966e7c3..0d1ec3651735 100644
--- a/arch/x86/events/intel/lbr.c
+++ b/arch/x86/events/intel/lbr.c
@@ -3,6 +3,7 @@
#include <linux/types.h>
#include <asm/cpu_device_id.h>
+#include <asm/cpuid/api.h>
#include <asm/perf_event.h>
#include <asm/msr.h>
diff --git a/arch/x86/events/zhaoxin/core.c b/arch/x86/events/zhaoxin/core.c
index d59992364880..15bb9c9c9358 100644
--- a/arch/x86/events/zhaoxin/core.c
+++ b/arch/x86/events/zhaoxin/core.c
@@ -14,6 +14,7 @@
#include <asm/apic.h>
#include <asm/cpufeature.h>
+#include <asm/cpuid/api.h>
#include <asm/hardirq.h>
#include <asm/msr.h>
diff --git a/arch/x86/include/asm/acrn.h b/arch/x86/include/asm/acrn.h
index fab11192c60a..db42b477c41d 100644
--- a/arch/x86/include/asm/acrn.h
+++ b/arch/x86/include/asm/acrn.h
@@ -2,6 +2,8 @@
#ifndef _ASM_X86_ACRN_H
#define _ASM_X86_ACRN_H
+#include <asm/cpuid/api.h>
+
/*
* This CPUID returns feature bitmaps in EAX.
* Guest VM uses this to detect the appropriate feature bit.
diff --git a/arch/x86/include/asm/microcode.h b/arch/x86/include/asm/microcode.h
index 8b41f26f003b..645e65ac1586 100644
--- a/arch/x86/include/asm/microcode.h
+++ b/arch/x86/include/asm/microcode.h
@@ -3,6 +3,7 @@
#define _ASM_X86_MICROCODE_H
#include <asm/msr.h>
+#include <asm/cpuid/api.h>
struct cpu_signature {
unsigned int sig;
diff --git a/arch/x86/include/asm/xen/hypervisor.h b/arch/x86/include/asm/xen/hypervisor.h
index c2fc7869b996..7c596cebfb78 100644
--- a/arch/x86/include/asm/xen/hypervisor.h
+++ b/arch/x86/include/asm/xen/hypervisor.h
@@ -37,6 +37,7 @@ extern struct shared_info *HYPERVISOR_shared_info;
extern struct start_info *xen_start_info;
#include <asm/bug.h>
+#include <asm/cpuid/api.h>
#include <asm/processor.h>
#define XEN_SIGNATURE "XenVMMXenVMM"
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index 6e2ee9ed76d2..6bfe714c75dd 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -15,6 +15,7 @@
#include <asm/cacheinfo.h>
#include <asm/cpu.h>
#include <asm/cpu_device_id.h>
+#include <asm/cpuid/api.h>
#include <asm/debugreg.h>
#include <asm/delay.h>
#include <asm/msr.h>
diff --git a/arch/x86/kernel/cpu/centaur.c b/arch/x86/kernel/cpu/centaur.c
index a3b55db35c96..cc5a390dcd07 100644
--- a/arch/x86/kernel/cpu/centaur.c
+++ b/arch/x86/kernel/cpu/centaur.c
@@ -5,6 +5,7 @@
#include <asm/cpu.h>
#include <asm/cpufeature.h>
+#include <asm/cpuid/api.h>
#include <asm/e820/api.h>
#include <asm/mtrr.h>
#include <asm/msr.h>
diff --git a/arch/x86/kernel/cpu/hygon.c b/arch/x86/kernel/cpu/hygon.c
index 2154f12766fb..75ad7eb1301a 100644
--- a/arch/x86/kernel/cpu/hygon.c
+++ b/arch/x86/kernel/cpu/hygon.c
@@ -10,6 +10,7 @@
#include <asm/apic.h>
#include <asm/cpu.h>
+#include <asm/cpuid/api.h>
#include <asm/smp.h>
#include <asm/numa.h>
#include <asm/cacheinfo.h>
diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c
index 5a11c522ea97..31ff1c578b40 100644
--- a/arch/x86/kernel/cpu/mce/core.c
+++ b/arch/x86/kernel/cpu/mce/core.c
@@ -47,6 +47,7 @@
#include <linux/uaccess.h>
#include <asm/cpu_device_id.h>
+#include <asm/cpuid/api.h>
#include <asm/fred.h>
#include <asm/mce.h>
#include <asm/msr.h>
diff --git a/arch/x86/kernel/cpu/mce/inject.c b/arch/x86/kernel/cpu/mce/inject.c
index d02c4f556cd0..42c82c14c48a 100644
--- a/arch/x86/kernel/cpu/mce/inject.c
+++ b/arch/x86/kernel/cpu/mce/inject.c
@@ -26,6 +26,7 @@
#include <asm/amd/nb.h>
#include <asm/apic.h>
+#include <asm/cpuid/api.h>
#include <asm/irq_vectors.h>
#include <asm/mce.h>
#include <asm/msr.h>
diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
index 9243ed3ded85..eae9eaa455ba 100644
--- a/arch/x86/kernel/cpu/microcode/core.c
+++ b/arch/x86/kernel/cpu/microcode/core.c
@@ -35,6 +35,7 @@
#include <asm/apic.h>
#include <asm/cmdline.h>
#include <asm/cpu_device_id.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include <asm/perf_event.h>
#include <asm/processor.h>
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
index 99fda8f7dba7..30d20f78f07d 100644
--- a/arch/x86/kernel/cpu/microcode/intel.c
+++ b/arch/x86/kernel/cpu/microcode/intel.c
@@ -23,6 +23,7 @@
#include <linux/uio.h>
#include <asm/cpu_device_id.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include <asm/processor.h>
#include <asm/setup.h>
diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index d0491bba9e30..771a65e6fefb 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -22,6 +22,7 @@
#include <hyperv/hvhdk.h>
#include <asm/apic.h>
+#include <asm/cpuid/api.h>
#include <asm/desc.h>
#include <asm/hypervisor.h>
#include <asm/i8259.h>
diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
index 35285567beec..52d3753ab020 100644
--- a/arch/x86/kernel/cpu/resctrl/core.c
+++ b/arch/x86/kernel/cpu/resctrl/core.c
@@ -22,6 +22,7 @@
#include <linux/slab.h>
#include <asm/cpu_device_id.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include <asm/resctrl.h>
diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c
index c261558276cd..5dffb9453d77 100644
--- a/arch/x86/kernel/cpu/resctrl/monitor.c
+++ b/arch/x86/kernel/cpu/resctrl/monitor.c
@@ -21,6 +21,7 @@
#include <linux/resctrl.h>
#include <asm/cpu_device_id.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include "internal.h"
diff --git a/arch/x86/kernel/cpu/scattered.c b/arch/x86/kernel/cpu/scattered.c
index 3d23b943f596..15f8752d4132 100644
--- a/arch/x86/kernel/cpu/scattered.c
+++ b/arch/x86/kernel/cpu/scattered.c
@@ -5,6 +5,7 @@
#include <linux/cpu.h>
#include <asm/apic.h>
+#include <asm/cpuid/api.h>
#include <asm/memtype.h>
#include <asm/processor.h>
diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c
index 2de01b379aa3..00bf42f4c536 100644
--- a/arch/x86/kernel/cpu/sgx/main.c
+++ b/arch/x86/kernel/cpu/sgx/main.c
@@ -14,8 +14,11 @@
#include <linux/slab.h>
#include <linux/sysfs.h>
#include <linux/vmalloc.h>
+
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include <asm/sgx.h>
+
#include "driver.h"
#include "encl.h"
#include "encls.h"
diff --git a/arch/x86/kernel/cpu/topology_amd.c b/arch/x86/kernel/cpu/topology_amd.c
index 843b1655ab45..abc6f5a7a486 100644
--- a/arch/x86/kernel/cpu/topology_amd.c
+++ b/arch/x86/kernel/cpu/topology_amd.c
@@ -2,6 +2,7 @@
#include <linux/cpu.h>
#include <asm/apic.h>
+#include <asm/cpuid/api.h>
#include <asm/memtype.h>
#include <asm/msr.h>
#include <asm/processor.h>
diff --git a/arch/x86/kernel/cpu/topology_common.c b/arch/x86/kernel/cpu/topology_common.c
index 48c47d02d8a9..38189e4fea0e 100644
--- a/arch/x86/kernel/cpu/topology_common.c
+++ b/arch/x86/kernel/cpu/topology_common.c
@@ -4,6 +4,7 @@
#include <xen/xen.h>
#include <asm/apic.h>
+#include <asm/cpuid/api.h>
#include <asm/intel-family.h>
#include <asm/processor.h>
#include <asm/smp.h>
diff --git a/arch/x86/kernel/cpu/topology_ext.c b/arch/x86/kernel/cpu/topology_ext.c
index 467b0326bf1a..eb915c73895f 100644
--- a/arch/x86/kernel/cpu/topology_ext.c
+++ b/arch/x86/kernel/cpu/topology_ext.c
@@ -2,6 +2,7 @@
#include <linux/cpu.h>
#include <asm/apic.h>
+#include <asm/cpuid/api.h>
#include <asm/memtype.h>
#include <asm/processor.h>
diff --git a/arch/x86/kernel/cpu/transmeta.c b/arch/x86/kernel/cpu/transmeta.c
index 42c939827621..1fdcd69c625c 100644
--- a/arch/x86/kernel/cpu/transmeta.c
+++ b/arch/x86/kernel/cpu/transmeta.c
@@ -3,8 +3,11 @@
#include <linux/sched.h>
#include <linux/sched/clock.h>
#include <linux/mm.h>
+
#include <asm/cpufeature.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
+
#include "cpu.h"
static void early_init_transmeta(struct cpuinfo_x86 *c)
diff --git a/arch/x86/kernel/cpu/zhaoxin.c b/arch/x86/kernel/cpu/zhaoxin.c
index 89b1c8a70fe8..cfcfb6221e3f 100644
--- a/arch/x86/kernel/cpu/zhaoxin.c
+++ b/arch/x86/kernel/cpu/zhaoxin.c
@@ -4,6 +4,7 @@
#include <asm/cpu.h>
#include <asm/cpufeature.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include "cpu.h"
diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c
index dae436253de4..cbd04b677fd1 100644
--- a/arch/x86/kernel/cpuid.c
+++ b/arch/x86/kernel/cpuid.c
@@ -37,6 +37,7 @@
#include <linux/gfp.h>
#include <linux/completion.h>
+#include <asm/cpuid/api.h>
#include <asm/processor.h>
#include <asm/msr.h>
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
index 3d745cd25a43..b7fc3b78086c 100644
--- a/arch/x86/kernel/paravirt.c
+++ b/arch/x86/kernel/paravirt.c
@@ -18,6 +18,7 @@
#include <asm/apic.h>
#include <asm/bug.h>
+#include <asm/cpuid/api.h>
#include <asm/debugreg.h>
#include <asm/delay.h>
#include <asm/desc.h>
diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h
index d3f5ae15a7ca..89f8ed3fb37a 100644
--- a/arch/x86/kvm/cpuid.h
+++ b/arch/x86/kvm/cpuid.h
@@ -3,8 +3,11 @@
#define ARCH_X86_KVM_CPUID_H
#include "reverse_cpuid.h"
+
#include <asm/cpu.h>
+#include <asm/cpuid/api.h>
#include <asm/processor.h>
+
#include <uapi/asm/kvm_para.h>
extern u32 kvm_cpu_caps[NR_KVM_CPU_CAPS] __read_mostly;
diff --git a/arch/x86/kvm/mmu/spte.c b/arch/x86/kvm/mmu/spte.c
index cfce03d8f123..e7b69275ae50 100644
--- a/arch/x86/kvm/mmu/spte.c
+++ b/arch/x86/kvm/mmu/spte.c
@@ -15,6 +15,7 @@
#include "x86.h"
#include "spte.h"
+#include <asm/cpuid/api.h>
#include <asm/e820/api.h>
#include <asm/memtype.h>
#include <asm/vmx.h>
diff --git a/arch/x86/kvm/reverse_cpuid.h b/arch/x86/kvm/reverse_cpuid.h
index fde0ae986003..be774dcf5e97 100644
--- a/arch/x86/kvm/reverse_cpuid.h
+++ b/arch/x86/kvm/reverse_cpuid.h
@@ -3,8 +3,10 @@
#define ARCH_X86_KVM_REVERSE_CPUID_H
#include <uapi/asm/kvm.h>
+
#include <asm/cpufeature.h>
#include <asm/cpufeatures.h>
+#include <asm/cpuid/types.h>
/*
* Define a KVM-only feature flag.
diff --git a/drivers/cpufreq/longrun.c b/drivers/cpufreq/longrun.c
index 263c48b8f628..3429857feb96 100644
--- a/drivers/cpufreq/longrun.c
+++ b/drivers/cpufreq/longrun.c
@@ -12,6 +12,7 @@
#include <linux/timex.h>
#include <asm/cpu_device_id.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include <asm/processor.h>
diff --git a/drivers/cpufreq/powernow-k7.c b/drivers/cpufreq/powernow-k7.c
index 0608040fcd1e..7a324a829a43 100644
--- a/drivers/cpufreq/powernow-k7.c
+++ b/drivers/cpufreq/powernow-k7.c
@@ -27,6 +27,7 @@
#include <linux/timex.h>
#include <asm/cpu_device_id.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include <asm/timer.h> /* Needed for recalibrate_cpu_khz() */
diff --git a/drivers/cpufreq/powernow-k8.c b/drivers/cpufreq/powernow-k8.c
index 2b5cdd8f1c0a..e909eee30edd 100644
--- a/drivers/cpufreq/powernow-k8.c
+++ b/drivers/cpufreq/powernow-k8.c
@@ -41,6 +41,7 @@
#include <asm/msr.h>
#include <asm/cpu_device_id.h>
+#include <asm/cpuid/api.h>
#include <acpi/processor.h>
diff --git a/drivers/cpufreq/speedstep-lib.c b/drivers/cpufreq/speedstep-lib.c
index f08817331aec..3c323cd8eede 100644
--- a/drivers/cpufreq/speedstep-lib.c
+++ b/drivers/cpufreq/speedstep-lib.c
@@ -15,6 +15,7 @@
#include <linux/module.h>
#include <linux/moduleparam.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include <asm/tsc.h>
diff --git a/drivers/firmware/efi/libstub/x86-5lvl.c b/drivers/firmware/efi/libstub/x86-5lvl.c
index f1c5fb45d5f7..029ad80cf0b4 100644
--- a/drivers/firmware/efi/libstub/x86-5lvl.c
+++ b/drivers/firmware/efi/libstub/x86-5lvl.c
@@ -2,6 +2,7 @@
#include <linux/efi.h>
#include <asm/boot.h>
+#include <asm/cpuid/api.h>
#include <asm/desc.h>
#include <asm/efi.h>
diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c
index 5a5674e85f63..1ecaef25f04e 100644
--- a/drivers/hwmon/fam15h_power.c
+++ b/drivers/hwmon/fam15h_power.c
@@ -19,6 +19,7 @@
#include <linux/time.h>
#include <linux/topology.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include <asm/processor.h>
diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
index babf2413d666..12115654689a 100644
--- a/drivers/hwmon/k10temp.c
+++ b/drivers/hwmon/k10temp.c
@@ -20,7 +20,9 @@
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/pci_ids.h>
+
#include <asm/amd/node.h>
+#include <asm/cpuid/api.h>
#include <asm/processor.h>
MODULE_DESCRIPTION("AMD Family 10h+ CPU core temperature monitor");
diff --git a/drivers/hwmon/k8temp.c b/drivers/hwmon/k8temp.c
index 8c1efce9a04b..eb167be245b9 100644
--- a/drivers/hwmon/k8temp.c
+++ b/drivers/hwmon/k8temp.c
@@ -15,6 +15,7 @@
#include <linux/pci.h>
#include <linux/slab.h>
+#include <asm/cpuid/api.h>
#include <asm/processor.h>
#define TEMP_FROM_REG(val) (((((val) >> 16) & 0xff) - 49) * 1000)
diff --git a/drivers/thermal/intel/intel_hfi.c b/drivers/thermal/intel/intel_hfi.c
index bd2fca7dc017..c910cc563d9d 100644
--- a/drivers/thermal/intel/intel_hfi.c
+++ b/drivers/thermal/intel/intel_hfi.c
@@ -41,6 +41,7 @@
#include <linux/topology.h>
#include <linux/workqueue.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include "intel_hfi.h"
diff --git a/drivers/thermal/intel/x86_pkg_temp_thermal.c b/drivers/thermal/intel/x86_pkg_temp_thermal.c
index c843cb5fc5c3..1b9e0b49856c 100644
--- a/drivers/thermal/intel/x86_pkg_temp_thermal.c
+++ b/drivers/thermal/intel/x86_pkg_temp_thermal.c
@@ -20,6 +20,7 @@
#include <linux/thermal.h>
#include <asm/cpu_device_id.h>
+#include <asm/cpuid/api.h>
#include <asm/msr.h>
#include "thermal_interrupt.h"
--
2.49.0
<asm/processor.h> includes the CPUID API header <asm/cpuid/api.h> but it
does not need it.
Remove the CPUID API header include.
This allows the CPUID API header to include <asm/processor.h> without
introducing a circular dependency, which is needed for the upcoming CPUID
model and parser.
Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
---
arch/x86/include/asm/processor.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index bde58f6510ac..910e36b0c00d 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -16,7 +16,6 @@ struct vm86;
#include <uapi/asm/sigcontext.h>
#include <asm/current.h>
#include <asm/cpufeatures.h>
-#include <asm/cpuid/api.h>
#include <asm/page.h>
#include <asm/pgtable_types.h>
#include <asm/percpu.h>
--
2.49.0
© 2016 - 2025 Red Hat, Inc.