bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH gnumach 2/2] fpu: Fix cpuid feature detection


From: Samuel Thibault
Subject: Re: [PATCH gnumach 2/2] fpu: Fix cpuid feature detection
Date: Thu, 8 Feb 2024 21:47:19 +0100
User-agent: NeoMutt/20170609 (1.8.3)

Applied both, thanks!

Olivier Valentin, le jeu. 08 févr. 2024 17:50:15 +0100, a ecrit:
> Make sure to fetch capabilities from cpuid(0xd,0x1)
> ---
>  i386/i386/fpu.c | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/i386/i386/fpu.c b/i386/i386/fpu.c
> index fefe5e49..4cd31dd9 100644
> --- a/i386/i386/fpu.c
> +++ b/i386/i386/fpu.c
> @@ -163,6 +163,7 @@ init_fpu(void)
>  
>               if (CPU_HAS_FEATURE(CPU_FEATURE_XSAVE)) {
>                   unsigned eax, ebx, ecx, edx;
> +                 unsigned xsave_cpu_features;
>  
>                   eax = 0xd;
>                   ecx = 0x0;
> @@ -177,7 +178,10 @@ init_fpu(void)
>                   eax = 0xd;
>                   ecx = 0x1;
>                   cpuid(eax, ebx, ecx, edx);
> -                 if (eax & CPU_FEATURE_XSAVES) {
> +                 xsave_cpu_features = eax;
> +
> +                 if (xsave_cpu_features & CPU_FEATURE_XSAVES) {
> +                     // all states enabled by XCR0|IA32_XSS
>                       fp_xsave_size = offsetof(struct i386_fpsave_state, 
> xfp_save_state) + ebx;
>                       if (fp_xsave_size < sizeof(struct i386_fpsave_state))
>                               panic("CPU-provided xstate size %d "
> @@ -190,6 +194,7 @@ init_fpu(void)
>                       eax = 0xd;
>                       ecx = 0x0;
>                       cpuid(eax, ebx, ecx, edx);
> +                     // all states enabled by XCR0
>                       fp_xsave_size = offsetof(struct i386_fpsave_state, 
> xfp_save_state) + ebx;
>                       if(fp_xsave_size < sizeof(struct i386_fpsave_state))
>                               panic("CPU-provided xstate size %d "
> @@ -197,9 +202,9 @@ init_fpu(void)
>                                     fp_xsave_size,
>                                     (int) sizeof(struct i386_fpsave_state));
>  
> -                     if (eax & CPU_FEATURE_XSAVEOPT)
> +                     if (xsave_cpu_features & CPU_FEATURE_XSAVEOPT)
>                           fp_save_kind = FP_XSAVEOPT;
> -                     else if (eax & CPU_FEATURE_XSAVEC)
> +                     else if (xsave_cpu_features & CPU_FEATURE_XSAVEC)
>                           fp_save_kind = FP_XSAVEC;
>                       else
>                           fp_save_kind = FP_XSAVE;
> -- 
> 2.40.1
> 
> 

-- 
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]