| 506 | } |
| 507 | |
| 508 | void |
| 509 | _rm_runlock(struct rmlock *rm, struct rm_priotracker *tracker) |
| 510 | { |
| 511 | struct pcpu *pc; |
| 512 | struct thread *td = tracker->rmp_thread; |
| 513 | |
| 514 | if (SCHEDULER_STOPPED()) |
| 515 | return; |
| 516 | |
| 517 | td->td_critnest++; /* critical_enter(); */ |
| 518 | pc = cpuid_to_pcpu[td->td_oncpu]; /* pcpu_find(td->td_oncpu); */ |
| 519 | rm_tracker_remove(pc, tracker); |
| 520 | td->td_critnest--; |
| 521 | sched_unpin(); |
| 522 | |
| 523 | if (rm->lock_object.lo_flags & LO_SLEEPABLE) |
| 524 | THREAD_SLEEPING_OK(); |
| 525 | |
| 526 | if (__predict_true(0 == (td->td_owepreempt | tracker->rmp_flags))) |
| 527 | return; |
| 528 | |
| 529 | _rm_unlock_hard(td, tracker); |
| 530 | } |
| 531 | |
| 532 | void |
| 533 | _rm_wlock(struct rmlock *rm) |
no test coverage detected