[PATCH v7 045/120] x86/cpu: Use parsed CPUID(0x80000008)
From: Ahmed S. Darwish
Date: Thu May 28 2026 - 11:51:27 EST
Use parsed CPUID(0x80000008) instead of issuing a direct CPUID query and
doing ugly bitwise operations.
Signed-off-by: Ahmed S. Darwish <darwi@xxxxxxxxxxxxx>
---
arch/x86/kernel/cpu/common.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index d8e46eb0f5c5..d78063e4e665 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -1102,10 +1102,9 @@ void get_cpu_cap(struct cpuinfo_x86 *c)
void get_cpu_address_sizes(struct cpuinfo_x86 *c)
{
- u32 eax, ebx, ecx, edx;
+ const struct leaf_0x80000008_0 *el8 = cpuid_leaf(c, 0x80000008);
- if (!cpu_has(c, X86_FEATURE_CPUID) ||
- (c->extended_cpuid_level < 0x80000008)) {
+ if (!cpu_has(c, X86_FEATURE_CPUID) || !el8) {
if (IS_ENABLED(CONFIG_X86_64)) {
c->x86_clflush_size = 64;
c->x86_phys_bits = 36;
@@ -1120,10 +1119,8 @@ void get_cpu_address_sizes(struct cpuinfo_x86 *c)
c->x86_phys_bits = 36;
}
} else {
- cpuid(0x80000008, &eax, &ebx, &ecx, &edx);
-
- c->x86_virt_bits = (eax >> 8) & 0xff;
- c->x86_phys_bits = eax & 0xff;
+ c->x86_virt_bits = el8->virt_addr_bits;
+ c->x86_phys_bits = el8->phys_addr_bits;
/* Provide a sane default if not enumerated: */
if (!c->x86_clflush_size)
--
2.54.0