From: "Ahmed S. Darwish" <darwi@linutronix.de>
To: Borislav Petkov <bp@alien8.de>, Ingo Molnar <mingo@redhat.com>,
Dave Hansen <dave.hansen@linux.intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
John Ogness <john.ogness@linutronix.de>,
"H. Peter Anvin" <hpa@zytor.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
x86@kernel.org, x86-cpuid@lists.linux.dev,
LKML <linux-kernel@vger.kernel.org>,
"Ahmed S. Darwish" <darwi@linutronix.de>
Subject: [PATCH v1 00/40] x86: Leaf 0x2 and leaf 0x4 refactorings
Date: Tue, 4 Mar 2025 09:51:11 +0100 [thread overview]
Message-ID: <20250304085152.51092-1-darwi@linutronix.de> (raw)
Hi,
As part of the onging x86-cpuid work [*], we've found that the handling
of leaf 0x2 and leaf 0x4 code paths is difficult to work with in its
current state. This was mostly due to the organic growth of the x86/cpu
and x86/cacheinfo logic since its very early Linux days.
This series cleans up and refactors these code paths in preparation for
the new x86-cpuid model.
Summary:
- Patches 1 to 3 are independent bugfixes that were discovered during
this refactoring work.
- Patches 4 to 10 are x86/cpu refactorings for code size and
readability.
- Patch 10 adds standardized and kernel-doc documented logic for
accessing leaf 0x2 one byte descriptors.
This makes the leaf 0x2 sanitization logic centralized in one place.
x86/cpu and x86/cacheinfo is modified to use such macros afterwards.
- Patches 11 to 28 refactors the x86/cacheinfo code.
Beside readability, some of the unrelated logic (e.g. AMD northbridge
cache_disable sysfs code) was first splitted from the generic leaf 0x4
code paths, at the structure relationships level, then gutted-out into
their own files.
- Patches 29 to 31 consolidate the existing (loop-based lookup) leaf 0x2
cache and TLB descriptor tables into one hash-based lookup table.
This reduces code size while still keeping rodata size in check.
Standardized macros for accessing this consolidated table are also
added. Call sites can now just do:
const struct leaf_0x2_table *entry;
union leaf_0x2_regs regs;
u8 *ptr;
get_leaf_0x2_regs(®s);
for_each_leaf_0x2_entry(regs, ptr, entry) {
switch (entry->c_type) {
...
}
}
without need to worry about sanitizing registers, skipping certain
descriptors, etc.
- Patches 32 and 33 uses the consolidated table above for x86/cpu and
x86/cacheinfo.
- Patches 34 to 40 provide the final set of x86/refactorings.
This series is based on -rc5. It also applies cleanly on top of
tip/x86/core.
Note, testing was done by comparing below files:
/proc/cpuinfo
/sys/devices/system/cpu/
/sys/kernel/debug/x86/topo/
dmesg --notime | grep 'Last level [id]TLB entries'
before and after on various old and new x86 machine configurations.
[*] https://gitlab.com/x86-cpuid.org/x86-cpuid-db
https://x86-cpuid.org
8<-----
Ahmed S. Darwish (33):
x86/cacheinfo: Validate cpuid leaf 0x2 EDX output
x86/cpu: Validate cpuid leaf 0x2 EDX output
x86/cpu: Properly parse leaf 0x2 TLB descriptor 0x63
x86/cpuid: Include linux/build_bug.h
x86/cpu: Remove unnecessary headers and reorder the rest
x86/cpu: Use max() for leaf 0x2 TLB descriptors parsing
x86/cpu: Simplify TLB entry count storage
x86/cpu: Remove leaf 0x2 parsing loop and add helpers
x86/cacheinfo: Remove unnecessary headers and reorder the rest
x86/cacheinfo: Use cpuid leaf 0x2 parsing helpers
x86/cacheinfo: Constify _cpuid4_info_regs instances
x86/cacheinfo: Align ci_info_init() assignment expressions
x86/cacheinfo: Standardize _cpuid4_info_regs instance naming
x86: treewide: Introduce x86_vendor_amd_or_hygon()
x86/cacheinfo: Consolidate AMD/Hygon leaf 0x8000001d calls
x86/cacheinfo: Separate amd_northbridge from _cpuid4_info_regs
x86/cacheinfo: Move AMD cache_disable_0/1 handling to separate file
x86/cacheinfo: Use sysfs_emit() for sysfs attributes show()
x86/cacheinfo: Separate Intel and AMD leaf 0x4 code paths
x86/cacheinfo: Rename _cpuid4_info_regs to _cpuid4_info
x86/cacheinfo: Clarify type markers for leaf 0x2 cache descriptors
x86/cacheinfo: Use enums for cache descriptor types
x86/cpu: Use enums for TLB descriptor types
sizes.h: Cover all possible x86 cpu cache sizes
x86/cacheinfo: Use consolidated leaf 0x2 descriptor table
x86/cpu: Use consolidated leaf 0x2 descriptor table
x86/cacheinfo: Separate leaf 0x2 handling and post-processing logic
x86/cacheinfo: Separate intel leaf 0x4 handling
x86/cacheinfo: Extract out cache level topology ID calculation
x86/cacheinfo: Extract out cache self-snoop checks
x86/cacheinfo: Relocate leaf 0x4 cache_type mapping
x86/cacheinfo: Introduce amd_hygon_cpu_has_l3_cache()
x86/cacheinfo: Apply maintainer-tip coding style fixes
Thomas Gleixner (7):
x86/cpu: Get rid of smp_store_cpu_info() indirection
x86/cpu: Remove unused TLB strings
x86/cacheinfo: Remove the P4 trace leftovers for real
x86/cacheinfo: Refactor leaf 0x2 cache descriptor lookup
x86/cacheinfo: Properly name amd_cpuid4()'s first parameter
x86/cacheinfo: Use proper name for cacheinfo instances
x86/cpu: Consolidate CPUID leaf 0x2 tables
arch/x86/events/amd/uncore.c | 3 +-
arch/x86/events/rapl.c | 3 +-
arch/x86/include/asm/cpuid.h | 1 +
arch/x86/include/asm/cpuid/types.h | 173 ++++
arch/x86/include/asm/processor.h | 26 +-
arch/x86/include/asm/smp.h | 2 -
arch/x86/kernel/amd_nb.c | 16 +-
arch/x86/kernel/cpu/Makefile | 5 +-
arch/x86/kernel/cpu/amd.c | 18 +-
arch/x86/kernel/cpu/amd_cache_disable.c | 301 +++++++
arch/x86/kernel/cpu/bugs.c | 12 +-
arch/x86/kernel/cpu/cacheinfo.c | 1062 +++++++----------------
arch/x86/kernel/cpu/common.c | 31 +-
arch/x86/kernel/cpu/cpu.h | 17 +-
arch/x86/kernel/cpu/cpuid_0x2_table.c | 128 +++
arch/x86/kernel/cpu/hygon.c | 16 +-
arch/x86/kernel/cpu/intel.c | 208 ++---
arch/x86/kernel/cpu/mce/core.c | 4 +-
arch/x86/kernel/cpu/mce/severity.c | 3 +-
arch/x86/kernel/cpu/mtrr/cleanup.c | 3 +-
arch/x86/kernel/smpboot.c | 27 +-
arch/x86/kvm/svm/svm.c | 3 +-
arch/x86/pci/amd_bus.c | 3 +-
arch/x86/xen/enlighten.c | 15 +-
arch/x86/xen/pmu.c | 3 +-
arch/x86/xen/smp_pv.c | 2 +-
include/linux/sizes.h | 8 +
27 files changed, 1076 insertions(+), 1017 deletions(-)
create mode 100644 arch/x86/include/asm/cpuid/types.h
create mode 100644 arch/x86/kernel/cpu/amd_cache_disable.c
create mode 100644 arch/x86/kernel/cpu/cpuid_0x2_table.c
base-commit: 7eb172143d5508b4da468ed59ee857c6e5e01da6
--
2.48.1
next reply other threads:[~2025-03-04 8:52 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-04 8:51 Ahmed S. Darwish [this message]
2025-03-04 8:51 ` [PATCH v1 01/40] x86/cacheinfo: Validate cpuid leaf 0x2 EDX output Ahmed S. Darwish
2025-03-04 9:37 ` [tip: x86/urgent] x86/cacheinfo: Validate CPUID " tip-bot2 for Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 02/40] x86/cpu: Validate cpuid " Ahmed S. Darwish
2025-03-04 9:37 ` [tip: x86/urgent] x86/cpu: Validate CPUID " tip-bot2 for Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 03/40] x86/cpu: Properly parse leaf 0x2 TLB descriptor 0x63 Ahmed S. Darwish
2025-03-04 9:37 ` [tip: x86/urgent] x86/cpu: Properly parse CPUID " tip-bot2 for Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 04/40] x86/cpuid: Include linux/build_bug.h Ahmed S. Darwish
2025-03-04 9:37 ` [tip: x86/cpu] x86/cpuid: Include <linux/build_bug.h> in <asm/cpuid.h> tip-bot2 for Ahmed S. Darwish
2025-03-04 10:26 ` tip-bot2 for Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 05/40] x86/cpu: Remove unnecessary headers and reorder the rest Ahmed S. Darwish
2025-03-04 9:14 ` Ingo Molnar
2025-03-04 9:28 ` Ahmed S. Darwish
2025-03-04 9:37 ` [tip: x86/cpu] " tip-bot2 for Ahmed S. Darwish
2025-03-04 10:26 ` tip-bot2 for Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 06/40] x86/cpu: Use max() for leaf 0x2 TLB descriptors parsing Ahmed S. Darwish
2025-03-04 9:37 ` [tip: x86/cpu] x86/cpu: Use max() for CPUID " tip-bot2 for Ahmed S. Darwish
2025-03-04 10:26 ` tip-bot2 for Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 07/40] x86/cpu: Simplify TLB entry count storage Ahmed S. Darwish
2025-03-04 9:37 ` [tip: x86/cpu] " tip-bot2 for Ahmed S. Darwish
2025-03-04 10:26 ` tip-bot2 for Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 08/40] x86/cpu: Get rid of smp_store_cpu_info() indirection Ahmed S. Darwish
2025-03-04 9:37 ` [tip: x86/cpu] x86/cpu: Get rid of the " tip-bot2 for Thomas Gleixner
2025-03-04 10:26 ` tip-bot2 for Thomas Gleixner
2025-03-04 8:51 ` [PATCH v1 09/40] x86/cpu: Remove unused TLB strings Ahmed S. Darwish
2025-03-04 9:37 ` [tip: x86/cpu] " tip-bot2 for Thomas Gleixner
2025-03-04 10:26 ` tip-bot2 for Thomas Gleixner
2025-03-04 8:51 ` [PATCH v1 10/40] x86/cpu: Remove leaf 0x2 parsing loop and add helpers Ahmed S. Darwish
2025-03-04 9:26 ` Ingo Molnar
2025-03-05 16:01 ` Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 11/40] x86/cacheinfo: Remove the P4 trace leftovers for real Ahmed S. Darwish
2025-03-04 9:47 ` [tip: x86/cpu] " tip-bot2 for Thomas Gleixner
2025-03-04 10:26 ` tip-bot2 for Thomas Gleixner
2025-03-04 8:51 ` [PATCH v1 12/40] x86/cacheinfo: Remove unnecessary headers and reorder the rest Ahmed S. Darwish
2025-03-04 9:47 ` [tip: x86/cpu] " tip-bot2 for Ahmed S. Darwish
2025-03-04 10:26 ` tip-bot2 for Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 13/40] x86/cacheinfo: Use cpuid leaf 0x2 parsing helpers Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 14/40] x86/cacheinfo: Refactor leaf 0x2 cache descriptor lookup Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 15/40] x86/cacheinfo: Properly name amd_cpuid4()'s first parameter Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 16/40] x86/cacheinfo: Use proper name for cacheinfo instances Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 17/40] x86/cacheinfo: Constify _cpuid4_info_regs instances Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 18/40] x86/cacheinfo: Align ci_info_init() assignment expressions Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 19/40] x86/cacheinfo: Standardize _cpuid4_info_regs instance naming Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 20/40] x86: treewide: Introduce x86_vendor_amd_or_hygon() Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 21/40] x86/cacheinfo: Consolidate AMD/Hygon leaf 0x8000001d calls Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 22/40] x86/cacheinfo: Separate amd_northbridge from _cpuid4_info_regs Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 23/40] x86/cacheinfo: Move AMD cache_disable_0/1 handling to separate file Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 24/40] x86/cacheinfo: Use sysfs_emit() for sysfs attributes show() Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 25/40] x86/cacheinfo: Separate Intel and AMD leaf 0x4 code paths Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 26/40] x86/cacheinfo: Rename _cpuid4_info_regs to _cpuid4_info Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 27/40] x86/cacheinfo: Clarify type markers for leaf 0x2 cache descriptors Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 28/40] x86/cacheinfo: Use enums for cache descriptor types Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 29/40] x86/cpu: Use enums for TLB " Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 30/40] sizes.h: Cover all possible x86 cpu cache sizes Ahmed S. Darwish
2025-03-04 9:35 ` Ingo Molnar
2025-03-05 16:18 ` Ahmed S. Darwish
2025-03-04 9:47 ` [tip: x86/cpu] <linux/sizes.h>: Cover all possible x86 CPU " tip-bot2 for Ahmed S. Darwish
2025-03-04 10:26 ` tip-bot2 for Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 31/40] x86/cpu: Consolidate CPUID leaf 0x2 tables Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 32/40] x86/cacheinfo: Use consolidated leaf 0x2 descriptor table Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 33/40] x86/cpu: " Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 34/40] x86/cacheinfo: Separate leaf 0x2 handling and post-processing logic Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 35/40] x86/cacheinfo: Separate intel leaf 0x4 handling Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 36/40] x86/cacheinfo: Extract out cache level topology ID calculation Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 37/40] x86/cacheinfo: Extract out cache self-snoop checks Ahmed S. Darwish
2025-03-04 10:38 ` Andrew Cooper
2025-03-05 18:40 ` Ahmed S. Darwish
2025-03-05 18:42 ` Andrew Cooper
2025-03-05 18:58 ` Ahmed S. Darwish
2025-03-05 19:01 ` Andrew Cooper
2025-03-04 8:51 ` [PATCH v1 38/40] x86/cacheinfo: Relocate leaf 0x4 cache_type mapping Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 39/40] x86/cacheinfo: Introduce amd_hygon_cpu_has_l3_cache() Ahmed S. Darwish
2025-03-04 8:51 ` [PATCH v1 40/40] x86/cacheinfo: Apply maintainer-tip coding style fixes Ahmed S. Darwish
2025-03-04 9:19 ` [PATCH v1 00/40] x86: Leaf 0x2 and leaf 0x4 refactorings Ingo Molnar
2025-03-04 9:38 ` Ingo Molnar
2025-03-05 17:36 ` Ahmed S. Darwish
2025-03-04 9:33 ` Ingo Molnar
2025-03-05 16:38 ` Ahmed S. Darwish
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250304085152.51092-1-darwi@linutronix.de \
--to=darwi@linutronix.de \
--cc=andrew.cooper3@citrix.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=john.ogness@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
--cc=x86-cpuid@lists.linux.dev \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®