summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/aim/swtch64.S
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2010-10-31 22:55:51 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2010-10-31 22:55:51 +0000
commitbd1e7d8ed8160529af7733432a1f7c35f9861ec2 (patch)
treed5abe6bcaa7a1d25ea37ca42fc954918d4141caf /sys/powerpc/aim/swtch64.S
parent46c88a1892c929cf359c6b6d6ff2d2b4dcae9272 (diff)
downloadFreeBSD-src-bd1e7d8ed8160529af7733432a1f7c35f9861ec2.zip
FreeBSD-src-bd1e7d8ed8160529af7733432a1f7c35f9861ec2.tar.gz
Next-to-leading-order perturbation of synchronization operations for
switching the user segment register. All races should now be closed and a minimum of pipelines flushes be required to close them.
Diffstat (limited to 'sys/powerpc/aim/swtch64.S')
-rw-r--r--sys/powerpc/aim/swtch64.S4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/powerpc/aim/swtch64.S b/sys/powerpc/aim/swtch64.S
index 4ffc8fa..f1af24e 100644
--- a/sys/powerpc/aim/swtch64.S
+++ b/sys/powerpc/aim/swtch64.S
@@ -113,7 +113,6 @@ ENTRY(cpu_switch)
li %r15,0 /* Save user segment for copyin/out */
li %r16,USER_SLB_SLOT
slbmfev %r15, %r16
- isync
std %r15,PCB_AIM_USR_VSID(%r6)
mr %r14,%r3 /* Copy the old thread ptr... */
@@ -222,6 +221,7 @@ blocked_loop:
ori %r5,%r5,USER_ADDR@highera
sldi %r5,%r5,32
oris %r5,%r5,USER_ADDR@ha
+ isync
slbie %r5
lis %r6,USER_SLB_SLBE@highesta
ori %r6,%r6,USER_SLB_SLBE@highera
@@ -230,8 +230,8 @@ blocked_loop:
ori %r6,%r6,USER_SLB_SLBE@l
ld %r5,PCB_AIM_USR_VSID(%r3)
slbmte %r5,%r6
-
isync
+
/*
* Perform a dummy stdcx. to clear any reservations we may have
* inherited from the previous thread. It doesn't matter if the
OpenPOWER on IntegriCloud