aboutsummaryrefslogtreecommitdiff
path: root/x86_64
diff options
context:
space:
mode:
Diffstat (limited to 'x86_64')
-rw-r--r--x86_64/Makefrag.am2
-rw-r--r--x86_64/locore.S7
2 files changed, 6 insertions, 3 deletions
diff --git a/x86_64/Makefrag.am b/x86_64/Makefrag.am
index 008ac58f..0c67517c 100644
--- a/x86_64/Makefrag.am
+++ b/x86_64/Makefrag.am
@@ -103,6 +103,8 @@ libkernel_a_SOURCES += \
i386/i386/irq.c \
i386/i386/irq.h \
i386/i386/msr.h \
+ i386/i386/percpu.h \
+ i386/i386/percpu.c \
i386/i386/pit.c \
i386/i386/pit.h
diff --git a/x86_64/locore.S b/x86_64/locore.S
index fabbf2e7..d640ef73 100644
--- a/x86_64/locore.S
+++ b/x86_64/locore.S
@@ -140,6 +140,7 @@
mov %dx,%ds ;\
mov %dx,%es ;\
mov %dx,%fs ;\
+ mov $(PERCPU_DS),%dx ;\
mov %dx,%gs
#else
#define SET_KERNEL_SEGMENTS
@@ -350,7 +351,7 @@ timer_normalize:
* Switch to a new timer.
*/
ENTRY(timer_switch)
- CPU_NUMBER(%edx) /* get this CPU */
+ CPU_NUMBER_NO_GS(%edx) /* get this CPU */
movl VA_ETC,%ecx /* get timer */
movl CX(EXT(current_tstamp),%rdx),%eax /* get old time stamp */
movl %ecx,CX(EXT(current_tstamp),%rdx) /* set new time stamp */
@@ -368,7 +369,7 @@ ENTRY(timer_switch)
* Initialize the first timer for a CPU.
*/
ENTRY(start_timer)
- CPU_NUMBER(%edx) /* get this CPU */
+ CPU_NUMBER_NO_GS(%edx) /* get this CPU */
movl VA_ETC,%ecx /* get timer */
movl %ecx,CX(EXT(current_tstamp),%rdx) /* set initial time stamp */
movl S_ARG0,%ecx /* get timer */
@@ -1445,7 +1446,7 @@ _syscall64_call:
_syscall64_check_for_ast:
/* Check for ast. */
- CPU_NUMBER(%r11)
+ CPU_NUMBER_NO_GS(%r11)
cmpl $0,CX(EXT(need_ast),%r11)
jz _syscall64_restore_state