bug-hurd
[Top][All Lists]
Advanced

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

[PATCH 1/3] x86_64: split SET_KERNEL_SEGMENTS() for NCPU > 1


From: Luca Dariz
Subject: [PATCH 1/3] x86_64: split SET_KERNEL_SEGMENTS() for NCPU > 1
Date: Sat, 9 Mar 2024 15:02:42 +0100

This allows 32on64 to work again. Also, it's a clearer indication of a
missing part.
---
 x86_64/locore.S | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/x86_64/locore.S b/x86_64/locore.S
index 806762bb..8f39a677 100644
--- a/x86_64/locore.S
+++ b/x86_64/locore.S
@@ -163,17 +163,21 @@
 #define POP_SEGMENTS_ISR(reg)
 #endif
 
+#if NCPUS > 1
+#define SET_KERNEL_SEGMENTS(reg)                \
+       ud2             /* TODO: use swapgs or similar */
+#else // NCPUS > 1
 #ifdef USER32
 #define SET_KERNEL_SEGMENTS(reg)              \
        mov     %ss,reg /* switch to kernel segments */ ;\
        mov     reg,%ds /* (same as kernel stack segment) */ ;\
        mov     reg,%es                 ;\
        mov     reg,%fs                 ;\
-       mov     $(PERCPU_DS),reg        ;\
        mov     reg,%gs
-#else
+#else // USER32
 #define SET_KERNEL_SEGMENTS(reg)
-#endif
+#endif // USER32
+#endif // NCPUS > 1
 
 /*
  * Fault recovery.
-- 
2.39.2




reply via email to

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