summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordrahn <drahn@openbsd.org>2007-05-29 20:22:10 +0000
committerdrahn <drahn@openbsd.org>2007-05-29 20:22:10 +0000
commit3a52310f3546e59008ed50d3a1038aaeda575454 (patch)
treea8afe9b9c913e6f110abe8ea5fab0a61752f43f3
parentthere was code inside (diff)
downloadwireguard-openbsd-3a52310f3546e59008ed50d3a1038aaeda575454.tar.xz
wireguard-openbsd-3a52310f3546e59008ed50d3a1038aaeda575454.zip
Panic if the locker is self.
-rw-r--r--sys/arch/powerpc/powerpc/mutex.S16
1 files changed, 15 insertions, 1 deletions
diff --git a/sys/arch/powerpc/powerpc/mutex.S b/sys/arch/powerpc/powerpc/mutex.S
index 24f0c4c6ad9..0b5bfab1e6b 100644
--- a/sys/arch/powerpc/powerpc/mutex.S
+++ b/sys/arch/powerpc/powerpc/mutex.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: mutex.S,v 1.1 2007/03/22 19:26:28 kettenis Exp $ */
+/* $OpenBSD: mutex.S,v 1.2 2007/05/29 20:22:10 drahn Exp $ */
/*
* Copyright (c) 2007 Dale Rahn
@@ -51,6 +51,10 @@ ENTRY(mtx_enter)
cmpwi 0,%r6,0 # test owner == 0
beq+ 0,.L_mutex_free # if owner == 0 branch free
.L_mutex_locked:
+#ifdef DIAGNOSTIC
+ cmpl 0,%r4,%r6
+ beq- .L_mutex_selflocked
+#endif
stw %r3,28(%r1) # save mtx during lcsplx
la %r4,28(%r1)
stwcx. %r3,0,%r4 # unreserve owner
@@ -68,6 +72,16 @@ ENTRY(mtx_enter)
addi %r1,%r1,32 # restore stack
blr
+#ifdef DIAGNOSTIC
+.L_mutex_selflocked:
+ mr %r5, %r3
+ lis %r3,.L_panicstr@ha
+ la %r3,.L_panicstr@l(%r3)
+ bl panic
+.L_panicstr:
+ .string "mtx_enter: recursed %x %x\n"
+#endif
+
ENTRY(mtx_leave)
li %r4,0