MCPcopy Create free account
hub / github.com/F-Stack/f-stack / mtx_wait_unlocked

Function mtx_wait_unlocked

freebsd/kern/kern_mutex.c:1278–1305  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1276}
1277
1278void
1279mtx_wait_unlocked(struct mtx *m)
1280{
1281 struct thread *owner;
1282 uintptr_t v;
1283
1284 KASSERT(m->mtx_lock != MTX_DESTROYED,
1285 ("%s() of destroyed mutex %p", __func__, m));
1286 KASSERT(LOCK_CLASS(&m->lock_object) == &lock_class_mtx_sleep,
1287 ("%s() not a sleep mutex %p (%s)", __func__, m,
1288 m->lock_object.lo_name));
1289 KASSERT(!mtx_owned(m), ("%s() waiting on myself on lock %p (%s)", __func__, m,
1290 m->lock_object.lo_name));
1291
1292 for (;;) {
1293 v = atomic_load_acq_ptr(&m->mtx_lock);
1294 if (v == MTX_UNOWNED) {
1295 break;
1296 }
1297 owner = lv_mtx_owner(v);
1298 if (!TD_IS_RUNNING(owner)) {
1299 mtx_lock(m);
1300 mtx_unlock(m);
1301 break;
1302 }
1303 cpu_spinwait();
1304 }
1305}
1306
1307#ifdef DDB
1308void

Callers 1

cache_purge_vgoneFunction · 0.85

Calls 2

mtx_lockFunction · 0.70
mtx_unlockFunction · 0.70

Tested by

no test coverage detected