summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvisa <visa@openbsd.org>2017-03-07 14:41:57 +0000
committervisa <visa@openbsd.org>2017-03-07 14:41:57 +0000
commit1c53fbb00ca6af9aa4adc638aee5cb14cf887578 (patch)
treee86178dc4382418ef7931e785bcd276d8ad23904
parentif we reported "Can't find CONTENTS", we know it's a bad package, (diff)
downloadwireguard-openbsd-1c53fbb00ca6af9aa4adc638aee5cb14cf887578.tar.xz
wireguard-openbsd-1c53fbb00ca6af9aa4adc638aee5cb14cf887578.zip
Keep on trying to grab the lock after leaving ddb after lock spin-out.
This restores the behaviour that preceded ticket locks. The feature can be useful in some debug cases where the system is not totally borken. OK guenther@, dlg@, mpi@
-rw-r--r--sys/arch/amd64/amd64/lock_machdep.c12
-rw-r--r--sys/arch/i386/i386/lock_machdep.c12
-rw-r--r--sys/arch/sparc64/sparc64/lock_machdep.c12
3 files changed, 21 insertions, 15 deletions
diff --git a/sys/arch/amd64/amd64/lock_machdep.c b/sys/arch/amd64/amd64/lock_machdep.c
index ef348c2dfe9..7588e24ef62 100644
--- a/sys/arch/amd64/amd64/lock_machdep.c
+++ b/sys/arch/amd64/amd64/lock_machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: lock_machdep.c,v 1.10 2016/03/19 11:34:22 mpi Exp $ */
+/* $OpenBSD: lock_machdep.c,v 1.11 2017/03/07 14:41:57 visa Exp $ */
/*
* Copyright (c) 2007 Artur Grabowski <art@openbsd.org>
@@ -52,12 +52,14 @@ __mp_lock_spin(struct __mp_lock *mpl, u_int me)
#else
int nticks = __mp_lock_spinout;
- while (mpl->mpl_ticket != me && --nticks > 0)
+ while (mpl->mpl_ticket != me) {
SPINLOCK_SPIN_HOOK;
- if (nticks == 0) {
- db_printf("__mp_lock(%p): lock spun out", mpl);
- Debugger();
+ if (--nticks <= 0) {
+ db_printf("__mp_lock(%p): lock spun out", mpl);
+ Debugger();
+ nticks = __mp_lock_spinout;
+ }
}
#endif
}
diff --git a/sys/arch/i386/i386/lock_machdep.c b/sys/arch/i386/i386/lock_machdep.c
index 3cc962a5730..17d402658e2 100644
--- a/sys/arch/i386/i386/lock_machdep.c
+++ b/sys/arch/i386/i386/lock_machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: lock_machdep.c,v 1.19 2016/03/19 11:34:22 mpi Exp $ */
+/* $OpenBSD: lock_machdep.c,v 1.20 2017/03/07 14:41:57 visa Exp $ */
/* $NetBSD: lock_machdep.c,v 1.1.2.3 2000/05/03 14:40:30 sommerfeld Exp $ */
/*-
@@ -82,12 +82,14 @@ __mp_lock_spin(struct __mp_lock *mpl, u_int me)
#else
int nticks = __mp_lock_spinout;
- while (mpl->mpl_ticket != me && --nticks > 0)
+ while (mpl->mpl_ticket != me) {
SPINLOCK_SPIN_HOOK;
- if (nticks == 0) {
- db_printf("__mp_lock(%p): lock spun out", mpl);
- Debugger();
+ if (--nticks <= 0) {
+ db_printf("__mp_lock(%p): lock spun out", mpl);
+ Debugger();
+ nticks = __mp_lock_spinout;
+ }
}
#endif
}
diff --git a/sys/arch/sparc64/sparc64/lock_machdep.c b/sys/arch/sparc64/sparc64/lock_machdep.c
index f458d378a3c..58470886e59 100644
--- a/sys/arch/sparc64/sparc64/lock_machdep.c
+++ b/sys/arch/sparc64/sparc64/lock_machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: lock_machdep.c,v 1.11 2016/03/19 11:34:22 mpi Exp $ */
+/* $OpenBSD: lock_machdep.c,v 1.12 2017/03/07 14:41:57 visa Exp $ */
/*
* Copyright (c) 2007 Artur Grabowski <art@openbsd.org>
@@ -95,12 +95,14 @@ __mp_lock_spin(struct __mp_lock *mpl, u_int me)
#else
int nticks = __mp_lock_spinout;
- while (mpl->mpl_ticket != me && --nticks > 0)
+ while (mpl->mpl_ticket != me) {
SPINLOCK_SPIN_HOOK;
- if (nticks == 0) {
- db_printf("__mp_lock(%p): lock spun out", mpl);
- Debugger();
+ if (--nticks <= 0) {
+ db_printf("__mp_lock(%p): lock spun out", mpl);
+ Debugger();
+ nticks = __mp_lock_spinout;
+ }
}
#endif
}