| 1251 | } |
| 1252 | |
| 1253 | void |
| 1254 | mtx_spin_wait_unlocked(struct mtx *m) |
| 1255 | { |
| 1256 | struct lock_delay_arg lda; |
| 1257 | |
| 1258 | KASSERT(m->mtx_lock != MTX_DESTROYED, |
| 1259 | ("%s() of destroyed mutex %p", __func__, m)); |
| 1260 | KASSERT(LOCK_CLASS(&m->lock_object) == &lock_class_mtx_spin, |
| 1261 | ("%s() of sleep mutex %p (%s)", __func__, m, |
| 1262 | m->lock_object.lo_name)); |
| 1263 | KASSERT(!mtx_owned(m), ("%s() waiting on myself on lock %p (%s)", __func__, m, |
| 1264 | m->lock_object.lo_name)); |
| 1265 | |
| 1266 | lda.spin_cnt = 0; |
| 1267 | |
| 1268 | while (atomic_load_acq_ptr(&m->mtx_lock) != MTX_UNOWNED) { |
| 1269 | if (__predict_true(lda.spin_cnt < 10000000)) { |
| 1270 | cpu_spinwait(); |
| 1271 | lda.spin_cnt++; |
| 1272 | } else { |
| 1273 | _mtx_lock_indefinite_check(m, &lda); |
| 1274 | } |
| 1275 | } |
| 1276 | } |
| 1277 | |
| 1278 | void |
| 1279 | mtx_wait_unlocked(struct mtx *m) |
no test coverage detected