summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorBryan Cantrill <bryan@joyent.com>2013-07-27 11:12:12 -0700
committerRobert Mustacchi <rm@joyent.com>2013-08-02 09:34:43 -0700
commit49dc33e37f0b57cc47ce0a40a5dffaf6627bae4d (patch)
tree126054cf2f67c455234fdd0f5d56cef5125aec51 /usr/src
parent299625c6492013aa7bd163862f0d181854f69b3c (diff)
downloadillumos-joyent-49dc33e37f0b57cc47ce0a40a5dffaf6627bae4d.tar.gz
3917 panic in turnstile_block() on unowned mutex
Reviewed by: Robert Mustacchi <rm@joyent.com> Approved by: Gordon Ross <gwr@nexenta.com>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/intel/ia32/ml/swtch.s8
1 files changed, 7 insertions, 1 deletions
diff --git a/usr/src/uts/intel/ia32/ml/swtch.s b/usr/src/uts/intel/ia32/ml/swtch.s
index 40be9e4e34..331c38d00e 100644
--- a/usr/src/uts/intel/ia32/ml/swtch.s
+++ b/usr/src/uts/intel/ia32/ml/swtch.s
@@ -23,7 +23,9 @@
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
+/*
+ * Copyright (c) 2013, Joyent, Inc. All rights reserved.
+ */
/*
* Process switching routines.
@@ -355,6 +357,7 @@ resume(kthread_t *t)
#endif /* __xpv */
movq %r12, CPU_THREAD(%r13) /* set CPU's thread pointer */
+ mfence /* synchronize with mutex_exit() */
xorl %ebp, %ebp /* make $<threadlist behave better */
movq T_LWP(%r12), %rax /* set associated lwp to */
movq %rax, CPU_LWP(%r13) /* CPU's lwp ptr */
@@ -519,6 +522,7 @@ resume_return:
#endif /* __xpv */
movl %edi, CPU_THREAD(%esi) /* set CPU's thread pointer */
+ mfence /* synchronize with mutex_exit() */
xorl %ebp, %ebp /* make $<threadlist behave better */
movl T_LWP(%edi), %eax /* set associated lwp to */
movl %eax, CPU_LWP(%esi) /* CPU's lwp ptr */
@@ -768,6 +772,7 @@ resume_from_intr(kthread_t *t)
movq %gs:CPU_THREAD, %r13 /* %r13 = curthread */
movq %r12, %gs:CPU_THREAD /* set CPU's thread pointer */
+ mfence /* synchronize with mutex_exit() */
movq T_SP(%r12), %rsp /* restore resuming thread's sp */
xorl %ebp, %ebp /* make $<threadlist behave better */
@@ -817,6 +822,7 @@ resume_from_intr_return:
#endif
movl %gs:CPU_THREAD, %esi /* %esi = curthread */
movl %edi, %gs:CPU_THREAD /* set CPU's thread pointer */
+ mfence /* synchronize with mutex_exit() */
movl T_SP(%edi), %esp /* restore resuming thread's sp */
xorl %ebp, %ebp /* make $<threadlist behave better */