| 1242 | } |
| 1243 | |
| 1244 | int |
| 1245 | lockmgr_xlock(struct lock *lk, u_int flags, const char *file, int line) |
| 1246 | { |
| 1247 | uintptr_t tid; |
| 1248 | |
| 1249 | MPASS((flags & LK_TYPE_MASK) == LK_EXCLUSIVE); |
| 1250 | MPASS((flags & LK_INTERLOCK) == 0); |
| 1251 | |
| 1252 | if (LK_CAN_WITNESS(flags)) |
| 1253 | WITNESS_CHECKORDER(&lk->lock_object, LOP_NEWORDER | |
| 1254 | LOP_EXCLUSIVE, file, line, NULL); |
| 1255 | tid = (uintptr_t)curthread; |
| 1256 | if (atomic_cmpset_acq_ptr(&lk->lk_lock, LK_UNLOCKED, tid)) { |
| 1257 | lockmgr_note_exclusive_acquire(lk, 0, 0, file, line, |
| 1258 | flags); |
| 1259 | return (0); |
| 1260 | } |
| 1261 | |
| 1262 | return (lockmgr_xlock_hard(lk, flags | LK_ADAPTIVE, NULL, file, line, NULL)); |
| 1263 | } |
| 1264 | |
| 1265 | int |
| 1266 | lockmgr_unlock(struct lock *lk) |
no test coverage detected