diff options
author | 2017-03-07 14:41:57 +0000 | |
---|---|---|
committer | 2017-03-07 14:41:57 +0000 | |
commit | 1c53fbb00ca6af9aa4adc638aee5cb14cf887578 (patch) | |
tree | e86178dc4382418ef7931e785bcd276d8ad23904 /sys | |
parent | if we reported "Can't find CONTENTS", we know it's a bad package, (diff) | |
download | wireguard-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@
Diffstat (limited to 'sys')
-rw-r--r-- | sys/arch/amd64/amd64/lock_machdep.c | 12 | ||||
-rw-r--r-- | sys/arch/i386/i386/lock_machdep.c | 12 | ||||
-rw-r--r-- | sys/arch/sparc64/sparc64/lock_machdep.c | 12 |
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 } |