[PATCH 09/10] x86/fpu: Remove unnecessary CPUID level check

Dave Hansen posted 10 patches 1 year ago
[PATCH 09/10] x86/fpu: Remove unnecessary CPUID level check
Posted by Dave Hansen 1 year ago

From: Dave Hansen <dave.hansen@linux.intel.com>

The CPUID level dependency table will entirely zap X86_FEATURE_XSAVE
if the CPUID level is too low.  This code is unreachable.  Kill it.

Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
---

 b/arch/x86/kernel/fpu/xstate.c |    5 -----
 1 file changed, 5 deletions(-)

diff -puN arch/x86/kernel/fpu/xstate.c~xsave-leaf-checks-2 arch/x86/kernel/fpu/xstate.c
--- a/arch/x86/kernel/fpu/xstate.c~xsave-leaf-checks-2	2024-12-13 12:45:36.903226562 -0800
+++ b/arch/x86/kernel/fpu/xstate.c	2024-12-13 12:45:36.907226732 -0800
@@ -764,11 +764,6 @@ void __init fpu__init_system_xstate(unsi
 		return;
 	}
 
-	if (boot_cpu_data.cpuid_level < XSTATE_CPUID) {
-		WARN_ON_FPU(1);
-		return;
-	}
-
 	/*
 	 * Find user xstates supported by the processor.
 	 */
_
Re: [PATCH 09/10] x86/fpu: Remove unnecessary CPUID level check
Posted by Chang S. Bae 1 year ago
On 12/13/2024 12:50 PM, Dave Hansen wrote:
> 
> diff -puN arch/x86/kernel/fpu/xstate.c~xsave-leaf-checks-2 arch/x86/kernel/fpu/xstate.c
> --- a/arch/x86/kernel/fpu/xstate.c~xsave-leaf-checks-2	2024-12-13 12:45:36.903226562 -0800
> +++ b/arch/x86/kernel/fpu/xstate.c	2024-12-13 12:45:36.907226732 -0800
> @@ -764,11 +764,6 @@ void __init fpu__init_system_xstate(unsi
>   		return;
>   	}
>   
> -	if (boot_cpu_data.cpuid_level < XSTATE_CPUID) {
> -		WARN_ON_FPU(1);
> -		return;
> -	}
> -

I think this change effectively reverts commit ee813d53a8e9 ("x86, 
xsave: Check cpuid level for XSTATE_CPUID (0x0d)").

At the time of its introduction, commit b38b06659055 ("x86: filter CPU 
features dependent on unavailable CPUID levels") was already there. The 
cpu_has_xsave flag (now boot_cpu_has(X86_FEATURE_XSAVE)) should be false 
for CPUs with a lower CPUID level in this:

void __cpuinit xsave_init(void)
{
     if (!cpu_has_xsave)
         return;
     ...
        xstate_enable_boot_cpu();
}

Then, the sanity check introduced in this code path appears redundant:

xsave_init()
-> xstate_enable_boot_cpu()
     -> setup_xstate_init()
         -> setup_xstate_features()

Reviewed-by: Chang S. Bae <chang.seok.bae@intel.com>

Thanks,
Chang
Re: [PATCH 09/10] x86/fpu: Remove unnecessary CPUID level check
Posted by Dave Hansen 1 year ago
On 12/16/24 11:05, Chang S. Bae wrote:
...> Then, the sanity check introduced in this code path appears redundant:
> 
> xsave_init()
> -> xstate_enable_boot_cpu()
>     -> setup_xstate_init()
>         -> setup_xstate_features()
> 
> Reviewed-by: Chang S. Bae <chang.seok.bae@intel.com>

Yeah, good point. Thanks for the review!

BTW, I do still want to make this into a _generic_ warning so that all
cpuid*() users get warned if they go reading leafs that are too high.
But I'll do that in another series.