Lines Matching refs:it

106 static void	realtimer_expire_l(struct itimer *it, bool proc_locked);
111 static void itimer_fire(struct itimer *it);
933 struct itimer *it; in itimer_proc_continue() local
949 it = p->p_itimers->its_timers[id]; in itimer_proc_continue()
950 if (it == NULL) in itimer_proc_continue()
952 if ((it->it_flags & ITF_PSTOPPED) != 0) { in itimer_proc_continue()
953 ITIMER_LOCK(it); in itimer_proc_continue()
954 if ((it->it_flags & ITF_PSTOPPED) != 0) { in itimer_proc_continue()
955 it->it_flags &= ~ITF_PSTOPPED; in itimer_proc_continue()
956 if ((it->it_flags & ITF_DELETING) == 0) in itimer_proc_continue()
957 realtimer_expire_l(it, true); in itimer_proc_continue()
959 ITIMER_UNLOCK(it); in itimer_proc_continue()
1203 struct itimer *it; in itimer_init() local
1205 it = (struct itimer *)mem; in itimer_init()
1206 mtx_init(&it->it_mtx, "itimer lock", NULL, MTX_DEF); in itimer_init()
1213 struct itimer *it; in itimer_fini() local
1215 it = (struct itimer *)mem; in itimer_fini()
1216 mtx_destroy(&it->it_mtx); in itimer_fini()
1220 itimer_enter(struct itimer *it) in itimer_enter() argument
1223 mtx_assert(&it->it_mtx, MA_OWNED); in itimer_enter()
1224 it->it_usecount++; in itimer_enter()
1228 itimer_leave(struct itimer *it) in itimer_leave() argument
1231 mtx_assert(&it->it_mtx, MA_OWNED); in itimer_leave()
1232 KASSERT(it->it_usecount > 0, ("invalid it_usecount")); in itimer_leave()
1234 if (--it->it_usecount == 0 && (it->it_flags & ITF_WANTED) != 0) in itimer_leave()
1235 wakeup(it); in itimer_leave()
1274 struct itimer *it; in kern_ktimer_create() local
1298 it = uma_zalloc(itimer_zone, M_WAITOK); in kern_ktimer_create()
1299 it->it_flags = 0; in kern_ktimer_create()
1300 it->it_usecount = 0; in kern_ktimer_create()
1301 timespecclear(&it->it_time.it_value); in kern_ktimer_create()
1302 timespecclear(&it->it_time.it_interval); in kern_ktimer_create()
1303 it->it_overrun = 0; in kern_ktimer_create()
1304 it->it_overrun_last = 0; in kern_ktimer_create()
1305 it->it_clockid = clock_id; in kern_ktimer_create()
1306 it->it_proc = p; in kern_ktimer_create()
1307 ksiginfo_init(&it->it_ksi); in kern_ktimer_create()
1308 it->it_ksi.ksi_flags |= KSI_INS | KSI_EXT; in kern_ktimer_create()
1309 error = CLOCK_CALL(clock_id, timer_create, (it)); in kern_ktimer_create()
1336 p->p_itimers->its_timers[id] = it; in kern_ktimer_create()
1338 it->it_sigev = *evp; in kern_ktimer_create()
1340 it->it_sigev.sigev_notify = SIGEV_SIGNAL; in kern_ktimer_create()
1345 it->it_sigev.sigev_signo = SIGALRM; in kern_ktimer_create()
1348 it->it_sigev.sigev_signo = SIGVTALRM; in kern_ktimer_create()
1351 it->it_sigev.sigev_signo = SIGPROF; in kern_ktimer_create()
1354 it->it_sigev.sigev_value.sival_int = id; in kern_ktimer_create()
1357 if (it->it_sigev.sigev_notify == SIGEV_SIGNAL || in kern_ktimer_create()
1358 it->it_sigev.sigev_notify == SIGEV_THREAD_ID) { in kern_ktimer_create()
1359 it->it_ksi.ksi_signo = it->it_sigev.sigev_signo; in kern_ktimer_create()
1360 it->it_ksi.ksi_code = SI_TIMER; in kern_ktimer_create()
1361 it->it_ksi.ksi_value = it->it_sigev.sigev_value; in kern_ktimer_create()
1362 it->it_ksi.ksi_timerid = id; in kern_ktimer_create()
1369 ITIMER_LOCK(it); in kern_ktimer_create()
1370 CLOCK_CALL(it->it_clockid, timer_delete, (it)); in kern_ktimer_create()
1371 ITIMER_UNLOCK(it); in kern_ktimer_create()
1372 uma_zfree(itimer_zone, it); in kern_ktimer_create()
1391 struct itimer *it; in itimer_find() local
1396 (it = p->p_itimers->its_timers[timerid]) == NULL) { in itimer_find()
1399 ITIMER_LOCK(it); in itimer_find()
1400 if ((it->it_flags & ITF_DELETING) != 0) { in itimer_find()
1401 ITIMER_UNLOCK(it); in itimer_find()
1402 it = NULL; in itimer_find()
1404 return (it); in itimer_find()
1411 struct itimer *it; in kern_ktimer_delete() local
1414 it = itimer_find(p, timerid); in kern_ktimer_delete()
1415 if (it == NULL) { in kern_ktimer_delete()
1421 it->it_flags |= ITF_DELETING; in kern_ktimer_delete()
1422 while (it->it_usecount > 0) { in kern_ktimer_delete()
1423 it->it_flags |= ITF_WANTED; in kern_ktimer_delete()
1424 msleep(it, &it->it_mtx, PPAUSE, "itimer", 0); in kern_ktimer_delete()
1426 it->it_flags &= ~ITF_WANTED; in kern_ktimer_delete()
1427 CLOCK_CALL(it->it_clockid, timer_delete, (it)); in kern_ktimer_delete()
1428 ITIMER_UNLOCK(it); in kern_ktimer_delete()
1431 if (KSI_ONQ(&it->it_ksi)) in kern_ktimer_delete()
1432 sigqueue_take(&it->it_ksi); in kern_ktimer_delete()
1435 uma_zfree(itimer_zone, it); in kern_ktimer_delete()
1468 struct itimer *it; in kern_ktimer_settime() local
1473 if (timer_id < 3 || (it = itimer_find(p, timer_id)) == NULL) { in kern_ktimer_settime()
1478 itimer_enter(it); in kern_ktimer_settime()
1479 error = CLOCK_CALL(it->it_clockid, timer_settime, (it, in kern_ktimer_settime()
1481 itimer_leave(it); in kern_ktimer_settime()
1482 ITIMER_UNLOCK(it); in kern_ktimer_settime()
1509 struct itimer *it; in kern_ktimer_gettime() local
1514 if (timer_id < 3 || (it = itimer_find(p, timer_id)) == NULL) { in kern_ktimer_gettime()
1519 itimer_enter(it); in kern_ktimer_gettime()
1520 error = CLOCK_CALL(it->it_clockid, timer_gettime, (it, val)); in kern_ktimer_gettime()
1521 itimer_leave(it); in kern_ktimer_gettime()
1522 ITIMER_UNLOCK(it); in kern_ktimer_gettime()
1543 struct itimer *it; in kern_ktimer_getoverrun() local
1548 (it = itimer_find(p, timer_id)) == NULL) { in kern_ktimer_getoverrun()
1552 td->td_retval[0] = it->it_overrun_last; in kern_ktimer_getoverrun()
1553 ITIMER_UNLOCK(it); in kern_ktimer_getoverrun()
1561 realtimer_create(struct itimer *it) in realtimer_create() argument
1563 callout_init_mtx(&it->it_callout, &it->it_mtx, 0); in realtimer_create()
1568 realtimer_delete(struct itimer *it) in realtimer_delete() argument
1570 mtx_assert(&it->it_mtx, MA_OWNED); in realtimer_delete()
1576 timespecclear(&it->it_time.it_value); in realtimer_delete()
1577 timespecclear(&it->it_time.it_interval); in realtimer_delete()
1578 ITIMER_UNLOCK(it); in realtimer_delete()
1579 callout_drain(&it->it_callout); in realtimer_delete()
1580 ITIMER_LOCK(it); in realtimer_delete()
1585 realtimer_gettime(struct itimer *it, struct itimerspec *ovalue) in realtimer_gettime() argument
1590 mtx_assert(&it->it_mtx, MA_OWNED); in realtimer_gettime()
1592 error = kern_clock_gettime(curthread, it->it_clockid, &cts); in realtimer_gettime()
1596 *ovalue = it->it_time; in realtimer_gettime()
1610 realtimer_settime(struct itimer *it, int flags, struct itimerspec *value, in realtimer_settime() argument
1618 mtx_assert(&it->it_mtx, MA_OWNED); in realtimer_settime()
1632 realtimer_gettime(it, ovalue); in realtimer_settime()
1634 it->it_time = val; in realtimer_settime()
1636 error = kern_clock_gettime(curthread, it->it_clockid, &cts); in realtimer_settime()
1643 timespecadd(&it->it_time.it_value, &cts, in realtimer_settime()
1644 &it->it_time.it_value); in realtimer_settime()
1653 callout_reset(&it->it_callout, tvtohz(&tv), realtimer_expire, in realtimer_settime()
1654 it); in realtimer_settime()
1656 callout_stop(&it->it_callout); in realtimer_settime()
1665 struct itimer *it; in itimer_accept() local
1668 it = itimer_find(p, timerid); in itimer_accept()
1669 if (it != NULL) { in itimer_accept()
1670 ksi->ksi_overrun = it->it_overrun; in itimer_accept()
1671 it->it_overrun_last = it->it_overrun; in itimer_accept()
1672 it->it_overrun = 0; in itimer_accept()
1673 ITIMER_UNLOCK(it); in itimer_accept()
1700 realtimer_expire_l(struct itimer *it, bool proc_locked) in realtimer_expire_l() argument
1708 error = kern_clock_gettime(curthread, it->it_clockid, &cts); in realtimer_expire_l()
1711 if (error == 0 && timespeccmp(&cts, &it->it_time.it_value, >=)) { in realtimer_expire_l()
1712 if (timespecisset(&it->it_time.it_interval)) { in realtimer_expire_l()
1713 timespecadd(&it->it_time.it_value, in realtimer_expire_l()
1714 &it->it_time.it_interval, in realtimer_expire_l()
1715 &it->it_time.it_value); in realtimer_expire_l()
1717 interval = timespectons(&it->it_time.it_interval); in realtimer_expire_l()
1718 value = timespectons(&it->it_time.it_value); in realtimer_expire_l()
1726 if (it->it_overrun + overruns >= in realtimer_expire_l()
1727 it->it_overrun && in realtimer_expire_l()
1728 it->it_overrun + overruns <= INT_MAX) { in realtimer_expire_l()
1729 it->it_overrun += (int)overruns; in realtimer_expire_l()
1731 it->it_overrun = INT_MAX; in realtimer_expire_l()
1732 it->it_ksi.ksi_errno = ERANGE; in realtimer_expire_l()
1736 it->it_time.it_value = timespecfromns(value); in realtimer_expire_l()
1740 timespecclear(&it->it_time.it_value); in realtimer_expire_l()
1743 p = it->it_proc; in realtimer_expire_l()
1744 if (timespecisset(&it->it_time.it_value)) { in realtimer_expire_l()
1746 it->it_flags |= ITF_PSTOPPED; in realtimer_expire_l()
1748 timespecsub(&it->it_time.it_value, &cts, &ts); in realtimer_expire_l()
1750 callout_reset(&it->it_callout, tvtohz(&tv), in realtimer_expire_l()
1751 realtimer_expire, it); in realtimer_expire_l()
1755 itimer_enter(it); in realtimer_expire_l()
1756 ITIMER_UNLOCK(it); in realtimer_expire_l()
1759 itimer_fire(it); in realtimer_expire_l()
1762 ITIMER_LOCK(it); in realtimer_expire_l()
1763 itimer_leave(it); in realtimer_expire_l()
1764 } else if (timespecisset(&it->it_time.it_value)) { in realtimer_expire_l()
1765 p = it->it_proc; in realtimer_expire_l()
1767 it->it_flags |= ITF_PSTOPPED; in realtimer_expire_l()
1769 ts = it->it_time.it_value; in realtimer_expire_l()
1772 callout_reset(&it->it_callout, tvtohz(&tv), in realtimer_expire_l()
1773 realtimer_expire, it); in realtimer_expire_l()
1786 itimer_fire(struct itimer *it) in itimer_fire() argument
1788 struct proc *p = it->it_proc; in itimer_fire()
1791 if (it->it_sigev.sigev_notify == SIGEV_SIGNAL || in itimer_fire()
1792 it->it_sigev.sigev_notify == SIGEV_THREAD_ID) { in itimer_fire()
1793 if (sigev_findtd(p, &it->it_sigev, &td) != 0) { in itimer_fire()
1794 ITIMER_LOCK(it); in itimer_fire()
1795 timespecclear(&it->it_time.it_value); in itimer_fire()
1796 timespecclear(&it->it_time.it_interval); in itimer_fire()
1797 callout_stop(&it->it_callout); in itimer_fire()
1798 ITIMER_UNLOCK(it); in itimer_fire()
1801 if (!KSI_ONQ(&it->it_ksi)) { in itimer_fire()
1802 it->it_ksi.ksi_errno = 0; in itimer_fire()
1803 ksiginfo_set_sigev(&it->it_ksi, &it->it_sigev); in itimer_fire()
1804 tdsendsignal(p, td, it->it_ksi.ksi_signo, &it->it_ksi); in itimer_fire()
1806 if (it->it_overrun < INT_MAX) in itimer_fire()
1807 it->it_overrun++; in itimer_fire()
1809 it->it_ksi.ksi_errno = ERANGE; in itimer_fire()
1837 struct itimer *it; in itimers_event_exit_exec() local
1845 if ((it = its->its_timers[i]) != NULL) in itimers_event_exit_exec()