svn commit: r355789 - head/sys/kern
Mateusz Guzik
mjg at FreeBSD.org
Mon Dec 16 00:04:34 UTC 2019
Author: mjg
Date: Mon Dec 16 00:04:33 2019
New Revision: 355789
URL: https://svnweb.freebsd.org/changeset/base/355789
Log:
mtx: eliminate recursion support from thread lock
Now that it is not used after schedlock changes got merged.
Note the unlock routine temporarily still checks for it on account of just using
regular spin unlock.
This is a prelude towards a general clean up.
Modified:
head/sys/kern/kern_mutex.c
Modified: head/sys/kern/kern_mutex.c
==============================================================================
--- head/sys/kern/kern_mutex.c Sun Dec 15 23:28:53 2019 (r355788)
+++ head/sys/kern/kern_mutex.c Mon Dec 16 00:04:33 2019 (r355789)
@@ -797,10 +797,9 @@ thread_lock_validate(struct mtx *m, int opts, const ch
KASSERT(LOCK_CLASS(&m->lock_object) == &lock_class_mtx_spin,
("thread_lock() of sleep mutex %s @ %s:%d",
m->lock_object.lo_name, file, line));
- if (mtx_owned(m))
- KASSERT((m->lock_object.lo_flags & LO_RECURSABLE) != 0,
- ("thread_lock: recursed on non-recursive mutex %s @ %s:%d\n",
- m->lock_object.lo_name, file, line));
+ KASSERT((m->lock_object.lo_flags & LO_RECURSABLE) == 0,
+ ("thread_lock: got a recursive mutex %s @ %s:%d\n",
+ m->lock_object.lo_name, file, line));
WITNESS_CHECKORDER(&m->lock_object,
opts | LOP_NEWORDER | LOP_EXCLUSIVE, file, line, NULL);
}
@@ -818,7 +817,7 @@ _thread_lock(struct thread *td)
#endif
{
struct mtx *m;
- uintptr_t tid, v;
+ uintptr_t tid;
tid = (uintptr_t)curthread;
@@ -827,19 +826,14 @@ _thread_lock(struct thread *td)
spinlock_enter();
m = td->td_lock;
thread_lock_validate(m, 0, file, line);
- v = MTX_READ_VALUE(m);
- if (__predict_true(v == MTX_UNOWNED)) {
- if (__predict_false(!_mtx_obtain_lock(m, tid)))
- goto slowpath_unlocked;
- } else if (v == tid) {
- m->mtx_recurse++;
- } else
+ if (__predict_false(m == &blocked_lock))
goto slowpath_unlocked;
+ if (__predict_false(!_mtx_obtain_lock(m, tid)))
+ goto slowpath_unlocked;
if (__predict_true(m == td->td_lock)) {
WITNESS_LOCK(&m->lock_object, LOP_EXCLUSIVE, file, line);
return;
}
- MPASS(m->mtx_recurse == 0);
_mtx_release_lock_quick(m);
slowpath_unlocked:
spinlock_exit();
@@ -907,11 +901,7 @@ retry:
break;
continue;
}
- if (v == tid) {
- m->mtx_recurse++;
- MPASS(m == td->td_lock);
- break;
- }
+ MPASS(v != tid);
lock_profile_obtain_lock_failed(&m->lock_object,
&contested, &waittime);
/* Give interrupts a chance while we spin. */
@@ -932,7 +922,6 @@ retry:
}
if (m == td->td_lock)
break;
- MPASS(m->mtx_recurse == 0);
_mtx_release_lock_quick(m);
}
LOCK_LOG_LOCK("LOCK", &m->lock_object, opts, m->mtx_recurse, file,
@@ -946,9 +935,8 @@ retry:
#ifdef KDTRACE_HOOKS
spin_time += lockstat_nsecs(&m->lock_object);
#endif
- if (m->mtx_recurse == 0)
- LOCKSTAT_PROFILE_OBTAIN_LOCK_SUCCESS(spin__acquire, m,
- contested, waittime, file, line);
+ LOCKSTAT_PROFILE_OBTAIN_LOCK_SUCCESS(spin__acquire, m, contested,
+ waittime, file, line);
#ifdef KDTRACE_HOOKS
if (lda.spin_cnt != 0)
LOCKSTAT_RECORD1(thread__spin, m, spin_time);
More information about the svn-src-all
mailing list