[PATCH v7 046/120] x86/apic: Use parsed and refreshed CPUID(0x1)
"Ahmed S. Darwish" <[email protected]> Thu, 28 May 2026 17:38:08 +0200
| Newsgroups | dev.linux.lists.x86-cpuid,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Use parsed CPUID(0x1) instead of doing manual bitwise operations and a direct CPUID query. Refresh CPUID(0x1).EDX since one apic_verify() caller may force local APIC enablement through an MSR write beforehand. Note, using the CPUID APIs here is safe since setup_arch() calls early_cpu_init() way before invoking any of the APIC initialization code. Signed-off-by: Ahmed S. Darwish <[email protected]> --- arch/x86/kernel/apic/apic.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 8c614750a19b..0ecd923b5809 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -1960,14 +1960,15 @@ static bool __init detect_init_APIC(void) static bool __init apic_verify(unsigned long addr) { - u32 features, h, l; + const struct leaf_0x1_0 *l1; + u32 h, l; /* - * The APIC feature bit should now be enabled - * in `cpuid' + * The APIC feature bit should now be enabled in CPUID */ - features = cpuid_edx(1); - if (!(features & (1 << X86_FEATURE_APIC))) { + cpuid_refresh_leaf(&boot_cpu_data, 0x1); + l1 = cpuid_leaf(&boot_cpu_data, 0x1); + if (!l1 || !l1->apic) { pr_warn("Could not enable APIC!\n"); return false; } -- 2.54.0