| 64 | } |
| 65 | |
| 66 | static void |
| 67 | syscall_thread_drain(struct sysent *se) |
| 68 | { |
| 69 | u_int32_t cnt, oldcnt; |
| 70 | |
| 71 | do { |
| 72 | oldcnt = se->sy_thrcnt; |
| 73 | KASSERT((oldcnt & SY_THR_STATIC) == 0, |
| 74 | ("drain on static syscall")); |
| 75 | cnt = oldcnt | SY_THR_DRAINING; |
| 76 | } while (atomic_cmpset_acq_32(&se->sy_thrcnt, oldcnt, cnt) == 0); |
| 77 | while (atomic_cmpset_32(&se->sy_thrcnt, SY_THR_DRAINING, |
| 78 | SY_THR_ABSENT) == 0) |
| 79 | pause("scdrn", hz/2); |
| 80 | } |
| 81 | |
| 82 | int |
| 83 | syscall_thread_enter(struct thread *td, struct sysent *se) |
no test coverage detected