summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
authorPhilip Guenthe <guenther@cvs.openbsd.org>2009-06-06 22:37:35 +0000
committerPhilip Guenthe <guenther@cvs.openbsd.org>2009-06-06 22:37:35 +0000
commit99a865be841618d7a3dae987d344a2196496dd26 (patch)
tree66816c7a29e078fa6045f2d2b2141f0837f88c93 /sys/arch
parent50f68aa760ea3f85fa66135f8d541d1a594cc2af (diff)
ipi_reloadcr3 uses CPUVAR, so it needs to set up %fs in order to
work if it interrupts userspace ok kettenis@ "you haven't committed that yet?" art@
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/i386/i386/apicvec.s6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/arch/i386/i386/apicvec.s b/sys/arch/i386/i386/apicvec.s
index bef1d855c14..feaaf66d4aa 100644
--- a/sys/arch/i386/i386/apicvec.s
+++ b/sys/arch/i386/i386/apicvec.s
@@ -1,4 +1,4 @@
-/* $OpenBSD: apicvec.s,v 1.17 2009/06/03 00:49:12 art Exp $ */
+/* $OpenBSD: apicvec.s,v 1.18 2009/06/06 22:37:34 guenther Exp $ */
/* $NetBSD: apicvec.s,v 1.1.2.2 2000/02/21 21:54:01 sommerfeld Exp $ */
/*-
@@ -133,6 +133,9 @@ XINTR(ipi_reloadcr3):
pushl %ds
movl $GSEL(GDATA_SEL, SEL_KPL), %eax
movl %eax, %ds
+ pushl %fs
+ movl $GSEL(GCPU_SEL, SEL_KPL),%eax
+ movw %ax,%fs
ioapic_asm_ack()
@@ -145,6 +148,7 @@ XINTR(ipi_reloadcr3):
lock
decl tlb_shoot_wait
+ popl %fs
popl %ds
popl %eax
iret