From 41a4430cb913183f9b0aaa7f04ce5c2514b2de7c Mon Sep 17 00:00:00 2001 From: Olivier Valentin Date: Thu, 8 Feb 2024 17:50:14 +0100 Subject: Revert "fpu: Fix cpuid feature detection" This reverts commit f8d0f98e80b3d7d9b24fa077818113fb0f4b3970. Message-ID: <20240208165015.4700-2-valentio@free.fr> --- i386/i386/fpu.c | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) (limited to 'i386') diff --git a/i386/i386/fpu.c b/i386/i386/fpu.c index 9bf5aecf..fefe5e49 100644 --- a/i386/i386/fpu.c +++ b/i386/i386/fpu.c @@ -174,26 +174,36 @@ init_fpu(void) set_xcr0(fp_xsave_support); #endif /* MACH_RING1 */ - 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 " - "is smaller than our minimum %d!\n", - fp_xsave_size, - (int) sizeof(struct i386_fpsave_state)); - eax = 0xd; ecx = 0x1; cpuid(eax, ebx, ecx, edx); + if (eax & CPU_FEATURE_XSAVES) { + 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 " + "is smaller than our minimum %d!\n", + fp_xsave_size, + (int) sizeof(struct i386_fpsave_state)); - if (eax & CPU_FEATURE_XSAVES) fp_save_kind = FP_XSAVES; - else if (eax & CPU_FEATURE_XSAVEOPT) - fp_save_kind = FP_XSAVEOPT; - else if (eax & CPU_FEATURE_XSAVEC) - fp_save_kind = FP_XSAVEC; - else - fp_save_kind = FP_XSAVE; + } else { + eax = 0xd; + ecx = 0x0; + cpuid(eax, ebx, ecx, edx); + 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 " + "is smaller than our minimum %d!\n", + fp_xsave_size, + (int) sizeof(struct i386_fpsave_state)); + + if (eax & CPU_FEATURE_XSAVEOPT) + fp_save_kind = FP_XSAVEOPT; + else if (eax & CPU_FEATURE_XSAVEC) + fp_save_kind = FP_XSAVEC; + else + fp_save_kind = FP_XSAVE; + } fp_kind = FP_387X; } -- cgit v1.2.3