Index: kern_umtx.c =================================================================== --- kern_umtx.c (revision 197734) +++ kern_umtx.c (working copy) @@ -31,6 +31,7 @@ #include "opt_compat.h" #include #include +#include #include #include #include @@ -2482,7 +2483,11 @@ sleep: /* contention bit is set, before sleeping, increase read waiter count */ blocked_readers = fuword32(&rwlock->rw_blocked_readers); - suword32(&rwlock->rw_blocked_readers, blocked_readers+1); + if (suword32(&rwlock->rw_blocked_readers, + blocked_readers+1) == -1) + panic("Unhandled"); + CTR4(KTR_SPARE2, "td = %p, lock = %p, bumped to: %d, state: %d", + curthread, rwlock, blocked_readers+1, rwlock->rw_state); while (state & wrflags) { umtxq_lock(&uq->uq_key); @@ -2501,7 +2506,11 @@ /* decrease read waiter count, and may clear read contention bit */ blocked_readers = fuword32(&rwlock->rw_blocked_readers); - suword32(&rwlock->rw_blocked_readers, blocked_readers-1); + if (suword32(&rwlock->rw_blocked_readers, + blocked_readers-1) == -1) + panic("Unhandled"); + CTR4(KTR_SPARE2, "td = %p, lock = %p, dec to: %d, state: %d", + curthread, rwlock, blocked_readers-1, rwlock->rw_state); if (blocked_readers == 1) { state = fuword32(__DEVOLATILE(int32_t *, &rwlock->rw_state)); for (;;) {