[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.