[PATCH v6 50/90] x86/cpu: Use parsed CPUID(0x80000008)
From: Ahmed S. Darwish
Date: Thu Mar 26 2026 - 22:31:31 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 5fa5463686ac..2beb53f6bed7 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -1100,10 +1100,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;
@@ -1118,10 +1117,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.53.0