bug-hurd
[Top][All Lists]
Advanced

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

[PATCH gnumach 1/2] Revert "fpu: Fix cpuid feature detection"


From: Olivier Valentin
Subject: [PATCH gnumach 1/2] Revert "fpu: Fix cpuid feature detection"
Date: Thu, 8 Feb 2024 17:50:14 +0100

This reverts commit f8d0f98e80b3d7d9b24fa077818113fb0f4b3970.
---
 i386/i386/fpu.c | 40 +++++++++++++++++++++++++---------------
 1 file changed, 25 insertions(+), 15 deletions(-)

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;
                }
-- 
2.40.1




reply via email to

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