Lines Matching +full:proc +full:- +full:id

1 /*-
2 * SPDX-License-Identifier: BSD-3-Clause
49 #include <sys/proc.h>
80 * the time-of-day and per-process interval timers. Subroutines
97 static struct itimer *itimer_find(struct proc *, int);
98 static void itimers_alloc(struct proc *);
139 * a miscreant to make the clock march double-time, but no worse. in settime()
141 if (securelevel_gt(td->td_ucred, 1) != 0) { in settime()
150 if (tv2.tv_sec < -1) { in settime()
151 tv->tv_sec = maxtime.tv_sec - 1; in settime()
152 printf("Time adjustment clamped to -1 second\n"); in settime()
158 tv->tv_sec = tv1.tv_sec + 1; in settime()
165 ts.tv_sec = tv->tv_sec; in settime()
166 ts.tv_nsec = tv->tv_usec * 1000; in settime()
174 id_t id; member
186 error = kern_clock_getcpuclockid2(td, uap->id, uap->which, &clk_id); in sys_clock_getcpuclockid2()
188 error = copyout(&clk_id, uap->clock_id, sizeof(clockid_t)); in sys_clock_getcpuclockid2()
193 kern_clock_getcpuclockid2(struct thread *td, id_t id, int which, in kern_clock_getcpuclockid2() argument
196 struct proc *p; in kern_clock_getcpuclockid2()
203 if (id != 0) { in kern_clock_getcpuclockid2()
204 error = pget(id, PGET_CANSEE | PGET_NOTID, &p); in kern_clock_getcpuclockid2()
208 pid = id; in kern_clock_getcpuclockid2()
210 pid = td->td_proc->p_pid; in kern_clock_getcpuclockid2()
215 tid = id == 0 ? td->td_tid : id; in kern_clock_getcpuclockid2()
236 error = kern_clock_gettime(td, uap->clock_id, &ats); in sys_clock_gettime()
238 error = copyout(&ats, uap->tp, sizeof(ats)); in sys_clock_gettime()
248 ats->tv_sec = runtime / tr; in cputick2timespec()
249 ats->tv_nsec = ((runtime % tr) * 1000000000ULL) / tr; in cputick2timespec()
261 runtime = curthread->td_runtime; in kern_thread_cputime()
263 runtime += curtime - switchtime; in kern_thread_cputime()
265 PROC_LOCK_ASSERT(targettd->td_proc, MA_OWNED); in kern_thread_cputime()
267 runtime = targettd->td_runtime; in kern_thread_cputime()
274 kern_process_cputime(struct proc *targetp, struct timespec *ats) in kern_process_cputime()
282 runtime = targetp->p_rux.rux_runtime; in kern_process_cputime()
283 if (curthread->td_proc == targetp) in kern_process_cputime()
284 runtime += cpu_ticks() - PCPU_GET(switchtime); in kern_process_cputime()
292 struct proc *p, *p2; in get_cputime()
298 p = td->td_proc; in get_cputime()
301 td2 = tdfind(tid, p->p_pid); in get_cputime()
305 PROC_UNLOCK(td2->td_proc); in get_cputime()
321 struct proc *p; in kern_clock_gettime()
323 p = td->td_proc; in kern_clock_gettime()
360 ats->tv_sec = time_second; in kern_clock_gettime()
361 ats->tv_nsec = 0; in kern_clock_gettime()
392 if ((error = copyin(uap->tp, &ats, sizeof(ats))) != 0) in sys_clock_settime()
394 return (kern_clock_settime(td, uap->clock_id, &ats)); in sys_clock_settime()
415 (ats->tv_sec > 8000ULL * 365 * 24 * 60 * 60 || in kern_clock_settime()
416 ats->tv_sec < utc_offset())) in kern_clock_settime()
418 /* XXX Don't convert nsec->usec and back */ in kern_clock_settime()
436 if (uap->tp == NULL) in sys_clock_getres()
439 error = kern_clock_getres(td, uap->clock_id, &ts); in sys_clock_getres()
441 error = copyout(&ts, uap->tp, sizeof(ts)); in sys_clock_getres()
449 ts->tv_sec = 0; in kern_clock_getres()
465 ts->tv_nsec = NS_PER_SEC / tc_getfrequency() + 1; in kern_clock_getres()
470 ts->tv_nsec = howmany(NS_PER_SEC, hz); in kern_clock_getres()
473 ts->tv_sec = 1; in kern_clock_getres()
474 ts->tv_nsec = 0; in kern_clock_getres()
479 ts->tv_nsec = 1000000000 / cpu_tickrate() + 1; in kern_clock_getres()
509 if (rqt->tv_nsec < 0 || rqt->tv_nsec >= NS_PER_SEC) in kern_clock_nanosleep()
540 td->td_rtcgen = in kern_clock_nanosleep()
551 over = ts.tv_sec - INT32_MAX / 2; in kern_clock_nanosleep()
552 ts.tv_sec -= over; in kern_clock_nanosleep()
563 } while (error == 0 && is_abs_real && td->td_rtcgen == 0); in kern_clock_nanosleep()
564 td->td_rtcgen = 0; in kern_clock_nanosleep()
573 ts = sbttots(sbt - sbtt); in kern_clock_nanosleep()
596 uap->rqtp, uap->rmtp)); in sys_nanosleep()
613 error = user_clock_nanosleep(td, uap->clock_id, uap->flags, uap->rqtp, in sys_clock_nanosleep()
614 uap->rmtp); in sys_clock_nanosleep()
651 if (uap->tp) { in sys_gettimeofday()
653 error = copyout(&atv, uap->tp, sizeof (atv)); in sys_gettimeofday()
655 if (error == 0 && uap->tzp != NULL) { in sys_gettimeofday()
658 error = copyout(&rtz, uap->tzp, sizeof (rtz)); in sys_gettimeofday()
677 if (uap->tv) { in sys_settimeofday()
678 error = copyin(uap->tv, &atv, sizeof(atv)); in sys_settimeofday()
684 if (uap->tzp) { in sys_settimeofday()
685 error = copyin(uap->tzp, &atz, sizeof(atz)); in sys_settimeofday()
704 if (tv->tv_usec < 0 || tv->tv_usec >= 1000000 || in kern_settimeofday()
705 tv->tv_sec < 0) in kern_settimeofday()
720 * as a delta, so that it is easy to keep periodic real-time signals from
745 error = kern_getitimer(td, uap->which, &aitv); in sys_getitimer()
748 return (copyout(&aitv, uap->itv, sizeof (struct itimerval))); in sys_getitimer()
754 struct proc *p = td->td_proc; in kern_getitimer()
768 *aitv = p->p_realtimer; in kern_getitimer()
770 if (timevalisset(&aitv->it_value)) { in kern_getitimer()
772 if (timevalcmp(&aitv->it_value, &ctv, <)) in kern_getitimer()
773 timevalclear(&aitv->it_value); in kern_getitimer()
775 timevalsub(&aitv->it_value, &ctv); in kern_getitimer()
779 *aitv = p->p_stats->p_timer[which]; in kern_getitimer()
801 if (uap->itv == NULL) { in sys_setitimer()
802 uap->itv = uap->oitv; in sys_setitimer()
806 if ((error = copyin(uap->itv, &aitv, sizeof(struct itimerval)))) in sys_setitimer()
808 error = kern_setitimer(td, uap->which, &aitv, &oitv); in sys_setitimer()
809 if (error != 0 || uap->oitv == NULL) in sys_setitimer()
811 return (copyout(&oitv, uap->oitv, sizeof(struct itimerval))); in sys_setitimer()
818 struct proc *p = td->td_proc; in kern_setitimer()
831 if (itimerfix(&aitv->it_value) || in kern_setitimer()
832 aitv->it_value.tv_sec > INT32_MAX / 2) in kern_setitimer()
834 if (!timevalisset(&aitv->it_value)) in kern_setitimer()
835 timevalclear(&aitv->it_interval); in kern_setitimer()
836 else if (itimerfix(&aitv->it_interval) || in kern_setitimer()
837 aitv->it_interval.tv_sec > INT32_MAX / 2) in kern_setitimer()
842 if (timevalisset(&p->p_realtimer.it_value)) in kern_setitimer()
843 callout_stop(&p->p_itcallout); in kern_setitimer()
845 if (timevalisset(&aitv->it_value)) { in kern_setitimer()
846 pr = tvtosbt(aitv->it_value) >> tc_precexp; in kern_setitimer()
847 timevaladd(&aitv->it_value, &ctv); in kern_setitimer()
848 sbt = tvtosbt(aitv->it_value); in kern_setitimer()
849 callout_reset_sbt(&p->p_itcallout, sbt, pr, in kern_setitimer()
852 *oitv = p->p_realtimer; in kern_setitimer()
853 p->p_realtimer = *aitv; in kern_setitimer()
855 if (timevalisset(&oitv->it_value)) { in kern_setitimer()
856 if (timevalcmp(&oitv->it_value, &ctv, <)) in kern_setitimer()
857 timevalclear(&oitv->it_value); in kern_setitimer()
859 timevalsub(&oitv->it_value, &ctv); in kern_setitimer()
862 if (aitv->it_interval.tv_sec == 0 && in kern_setitimer()
863 aitv->it_interval.tv_usec != 0 && in kern_setitimer()
864 aitv->it_interval.tv_usec < tick) in kern_setitimer()
865 aitv->it_interval.tv_usec = tick; in kern_setitimer()
866 if (aitv->it_value.tv_sec == 0 && in kern_setitimer()
867 aitv->it_value.tv_usec != 0 && in kern_setitimer()
868 aitv->it_value.tv_usec < tick) in kern_setitimer()
869 aitv->it_value.tv_usec = tick; in kern_setitimer()
871 *oitv = p->p_stats->p_timer[which]; in kern_setitimer()
872 p->p_stats->p_timer[which] = *aitv; in kern_setitimer()
883 realitexpire_reset_callout(struct proc *p, sbintime_t *isbtp) in realitexpire_reset_callout()
887 prec = isbtp == NULL ? tvtosbt(p->p_realtimer.it_interval) : *isbtp; in realitexpire_reset_callout()
888 callout_reset_sbt(&p->p_itcallout, tvtosbt(p->p_realtimer.it_value), in realitexpire_reset_callout()
893 itimer_proc_continue(struct proc *p) in itimer_proc_continue()
897 int id; in itimer_proc_continue() local
901 if ((p->p_flag2 & P2_ITSTOPPED) != 0) { in itimer_proc_continue()
902 p->p_flag2 &= ~P2_ITSTOPPED; in itimer_proc_continue()
904 if (timevalcmp(&p->p_realtimer.it_value, &ctv, >=)) in itimer_proc_continue()
910 if (p->p_itimers != NULL) { in itimer_proc_continue()
911 for (id = 3; id < TIMER_MAX; id++) { in itimer_proc_continue()
912 it = p->p_itimers->its_timers[id]; in itimer_proc_continue()
915 if ((it->it_flags & ITF_PSTOPPED) != 0) { in itimer_proc_continue()
917 if ((it->it_flags & ITF_PSTOPPED) != 0) { in itimer_proc_continue()
918 it->it_flags &= ~ITF_PSTOPPED; in itimer_proc_continue()
919 if ((it->it_flags & ITF_DELETING) == 0) in itimer_proc_continue()
943 struct proc *p; in realitexpire()
947 p = (struct proc *)arg; in realitexpire()
949 if (!timevalisset(&p->p_realtimer.it_interval)) { in realitexpire()
950 timevalclear(&p->p_realtimer.it_value); in realitexpire()
954 isbt = tvtosbt(p->p_realtimer.it_interval); in realitexpire()
960 timevaladd(&p->p_realtimer.it_value, in realitexpire()
961 &p->p_realtimer.it_interval); in realitexpire()
962 } while (timevalcmp(&p->p_realtimer.it_value, &ctv, <=)); in realitexpire()
965 p->p_flag2 |= P2_ITSTOPPED; in realitexpire()
969 p->p_flag2 &= ~P2_ITSTOPPED; in realitexpire()
983 if (tv->tv_sec < 0 || tv->tv_usec < 0 || tv->tv_usec >= 1000000) in itimerfix()
985 if (tv->tv_sec == 0 && tv->tv_usec != 0 && in itimerfix()
986 tv->tv_usec < (u_int)tick / 16) in itimerfix()
987 tv->tv_usec = (u_int)tick / 16; in itimerfix()
995 * it. In this case, carry over (usec - old value) to
1005 if (itp->it_value.tv_usec < usec) { in itimerdecr()
1006 if (itp->it_value.tv_sec == 0) { in itimerdecr()
1008 usec -= itp->it_value.tv_usec; in itimerdecr()
1011 itp->it_value.tv_usec += 1000000; in itimerdecr()
1012 itp->it_value.tv_sec--; in itimerdecr()
1014 itp->it_value.tv_usec -= usec; in itimerdecr()
1016 if (timevalisset(&itp->it_value)) in itimerdecr()
1020 if (timevalisset(&itp->it_interval)) { in itimerdecr()
1021 itp->it_value = itp->it_interval; in itimerdecr()
1022 itp->it_value.tv_usec -= usec; in itimerdecr()
1023 if (itp->it_value.tv_usec < 0) { in itimerdecr()
1024 itp->it_value.tv_usec += 1000000; in itimerdecr()
1025 itp->it_value.tv_sec--; in itimerdecr()
1028 itp->it_value.tv_usec = 0; /* sec is already 0 */ in itimerdecr()
1043 t1->tv_sec += t2->tv_sec; in timevaladd()
1044 t1->tv_usec += t2->tv_usec; in timevaladd()
1052 t1->tv_sec -= t2->tv_sec; in timevalsub()
1053 t1->tv_usec -= t2->tv_usec; in timevalsub()
1061 if (t1->tv_usec < 0) { in timevalfix()
1062 t1->tv_sec--; in timevalfix()
1063 t1->tv_usec += 1000000; in timevalfix()
1065 if (t1->tv_usec >= 1000000) { in timevalfix()
1066 t1->tv_sec++; in timevalfix()
1067 t1->tv_usec -= 1000000; in timevalfix()
1072 * ratecheck(): simple time-based rate-limit checking.
1089 (lasttime->tv_sec == 0 && lasttime->tv_usec == 0)) { in ratecheck()
1103 * maxeps of 0 always causes zero to be returned. maxeps of -1
1122 if (lasttime->tv_sec == 0 || (u_int)(now - lasttime->tv_sec) >= hz) { in eventratecheck()
1123 lasttime->tv_sec = now; in eventratecheck()
1168 mtx_init(&it->it_mtx, "itimer lock", NULL, MTX_DEF); in itimer_init()
1178 mtx_destroy(&it->it_mtx); in itimer_fini()
1185 mtx_assert(&it->it_mtx, MA_OWNED); in itimer_enter()
1186 it->it_usecount++; in itimer_enter()
1193 mtx_assert(&it->it_mtx, MA_OWNED); in itimer_leave()
1194 KASSERT(it->it_usecount > 0, ("invalid it_usecount")); in itimer_leave()
1196 if (--it->it_usecount == 0 && (it->it_flags & ITF_WANTED) != 0) in itimer_leave()
1211 int id; in sys_ktimer_create() local
1214 if (uap->evp == NULL) { in sys_ktimer_create()
1217 error = copyin(uap->evp, &ev, sizeof(ev)); in sys_ktimer_create()
1222 error = kern_ktimer_create(td, uap->clock_id, evp, &id, -1); in sys_ktimer_create()
1224 error = copyout(&id, uap->timerid, sizeof(int)); in sys_ktimer_create()
1226 kern_ktimer_delete(td, id); in sys_ktimer_create()
1235 struct proc *p = td->td_proc; in kern_ktimer_create()
1237 int id; in kern_ktimer_create() local
1247 if (evp->sigev_notify != SIGEV_NONE && in kern_ktimer_create()
1248 evp->sigev_notify != SIGEV_SIGNAL && in kern_ktimer_create()
1249 evp->sigev_notify != SIGEV_THREAD_ID) in kern_ktimer_create()
1251 if ((evp->sigev_notify == SIGEV_SIGNAL || in kern_ktimer_create()
1252 evp->sigev_notify == SIGEV_THREAD_ID) && in kern_ktimer_create()
1253 !_SIG_VALID(evp->sigev_signo)) in kern_ktimer_create()
1257 if (p->p_itimers == NULL) in kern_ktimer_create()
1261 it->it_flags = 0; in kern_ktimer_create()
1262 it->it_usecount = 0; in kern_ktimer_create()
1263 timespecclear(&it->it_time.it_value); in kern_ktimer_create()
1264 timespecclear(&it->it_time.it_interval); in kern_ktimer_create()
1265 it->it_overrun = 0; in kern_ktimer_create()
1266 it->it_overrun_last = 0; in kern_ktimer_create()
1267 it->it_clockid = clock_id; in kern_ktimer_create()
1268 it->it_proc = p; in kern_ktimer_create()
1269 ksiginfo_init(&it->it_ksi); in kern_ktimer_create()
1270 it->it_ksi.ksi_flags |= KSI_INS | KSI_EXT; in kern_ktimer_create()
1276 if (preset_id != -1) { in kern_ktimer_create()
1278 id = preset_id; in kern_ktimer_create()
1279 if (p->p_itimers->its_timers[id] != NULL) { in kern_ktimer_create()
1289 for (id = 3; id < TIMER_MAX; id++) in kern_ktimer_create()
1290 if (p->p_itimers->its_timers[id] == NULL) in kern_ktimer_create()
1292 if (id == TIMER_MAX) { in kern_ktimer_create()
1298 p->p_itimers->its_timers[id] = it; in kern_ktimer_create()
1300 it->it_sigev = *evp; in kern_ktimer_create()
1302 it->it_sigev.sigev_notify = SIGEV_SIGNAL; in kern_ktimer_create()
1306 it->it_sigev.sigev_signo = SIGALRM; in kern_ktimer_create()
1309 it->it_sigev.sigev_signo = SIGVTALRM; in kern_ktimer_create()
1312 it->it_sigev.sigev_signo = SIGPROF; in kern_ktimer_create()
1315 it->it_sigev.sigev_value.sival_int = id; in kern_ktimer_create()
1318 if (it->it_sigev.sigev_notify == SIGEV_SIGNAL || in kern_ktimer_create()
1319 it->it_sigev.sigev_notify == SIGEV_THREAD_ID) { in kern_ktimer_create()
1320 it->it_ksi.ksi_signo = it->it_sigev.sigev_signo; in kern_ktimer_create()
1321 it->it_ksi.ksi_code = SI_TIMER; in kern_ktimer_create()
1322 it->it_ksi.ksi_value = it->it_sigev.sigev_value; in kern_ktimer_create()
1323 it->it_ksi.ksi_timerid = id; in kern_ktimer_create()
1326 *timerid = id; in kern_ktimer_create()
1331 CLOCK_CALL(it->it_clockid, timer_delete, (it)); in kern_ktimer_create()
1346 return (kern_ktimer_delete(td, uap->timerid)); in sys_ktimer_delete()
1350 itimer_find(struct proc *p, int timerid) in itimer_find()
1355 if ((p->p_itimers == NULL) || in itimer_find()
1357 (it = p->p_itimers->its_timers[timerid]) == NULL) { in itimer_find()
1361 if ((it->it_flags & ITF_DELETING) != 0) { in itimer_find()
1371 struct proc *p = td->td_proc; in kern_ktimer_delete()
1382 it->it_flags |= ITF_DELETING; in kern_ktimer_delete()
1383 while (it->it_usecount > 0) { in kern_ktimer_delete()
1384 it->it_flags |= ITF_WANTED; in kern_ktimer_delete()
1385 msleep(it, &it->it_mtx, PPAUSE, "itimer", 0); in kern_ktimer_delete()
1387 it->it_flags &= ~ITF_WANTED; in kern_ktimer_delete()
1388 CLOCK_CALL(it->it_clockid, timer_delete, (it)); in kern_ktimer_delete()
1392 if (KSI_ONQ(&it->it_ksi)) in kern_ktimer_delete()
1393 sigqueue_take(&it->it_ksi); in kern_ktimer_delete()
1394 p->p_itimers->its_timers[timerid] = NULL; in kern_ktimer_delete()
1414 error = copyin(uap->value, &val, sizeof(val)); in sys_ktimer_settime()
1417 ovalp = uap->ovalue != NULL ? &oval : NULL; in sys_ktimer_settime()
1418 error = kern_ktimer_settime(td, uap->timerid, uap->flags, &val, ovalp); in sys_ktimer_settime()
1419 if (error == 0 && uap->ovalue != NULL) in sys_ktimer_settime()
1420 error = copyout(ovalp, uap->ovalue, sizeof(*ovalp)); in sys_ktimer_settime()
1428 struct proc *p; in kern_ktimer_settime()
1432 p = td->td_proc; in kern_ktimer_settime()
1440 error = CLOCK_CALL(it->it_clockid, timer_settime, (it, in kern_ktimer_settime()
1460 error = kern_ktimer_gettime(td, uap->timerid, &val); in sys_ktimer_gettime()
1462 error = copyout(&val, uap->value, sizeof(val)); in sys_ktimer_gettime()
1469 struct proc *p; in kern_ktimer_gettime()
1473 p = td->td_proc; in kern_ktimer_gettime()
1481 error = CLOCK_CALL(it->it_clockid, timer_gettime, (it, val)); in kern_ktimer_gettime()
1497 return (kern_ktimer_getoverrun(td, uap->timerid)); in sys_ktimer_getoverrun()
1503 struct proc *p = td->td_proc; in kern_ktimer_getoverrun()
1513 td->td_retval[0] = it->it_overrun_last; in kern_ktimer_getoverrun()
1524 callout_init_mtx(&it->it_callout, &it->it_mtx, 0); in realtimer_create()
1531 mtx_assert(&it->it_mtx, MA_OWNED); in realtimer_delete()
1537 timespecclear(&it->it_time.it_value); in realtimer_delete()
1538 timespecclear(&it->it_time.it_interval); in realtimer_delete()
1540 callout_drain(&it->it_callout); in realtimer_delete()
1550 mtx_assert(&it->it_mtx, MA_OWNED); in realtimer_gettime()
1552 realtimer_clocktime(it->it_clockid, &cts); in realtimer_gettime()
1553 *ovalue = it->it_time; in realtimer_gettime()
1554 if (ovalue->it_value.tv_sec != 0 || ovalue->it_value.tv_nsec != 0) { in realtimer_gettime()
1555 timespecsub(&ovalue->it_value, &cts, &ovalue->it_value); in realtimer_gettime()
1556 if (ovalue->it_value.tv_sec < 0 || in realtimer_gettime()
1557 (ovalue->it_value.tv_sec == 0 && in realtimer_gettime()
1558 ovalue->it_value.tv_nsec == 0)) { in realtimer_gettime()
1559 ovalue->it_value.tv_sec = 0; in realtimer_gettime()
1560 ovalue->it_value.tv_nsec = 1; in realtimer_gettime()
1574 mtx_assert(&it->it_mtx, MA_OWNED); in realtimer_settime()
1590 it->it_time = val; in realtimer_settime()
1592 realtimer_clocktime(it->it_clockid, &cts); in realtimer_settime()
1596 timespecadd(&it->it_time.it_value, &cts, in realtimer_settime()
1597 &it->it_time.it_value); in realtimer_settime()
1606 callout_reset(&it->it_callout, tvtohz(&tv), realtimer_expire, in realtimer_settime()
1609 callout_stop(&it->it_callout); in realtimer_settime()
1616 realtimer_clocktime(clockid_t id, struct timespec *ts) in realtimer_clocktime() argument
1618 if (id == CLOCK_REALTIME) in realtimer_clocktime()
1625 itimer_accept(struct proc *p, int timerid, ksiginfo_t *ksi) in itimer_accept()
1632 ksi->ksi_overrun = it->it_overrun; in itimer_accept()
1633 it->it_overrun_last = it->it_overrun; in itimer_accept()
1634 it->it_overrun = 0; in itimer_accept()
1647 if ((UINT64_MAX - ts->tv_nsec) / NS_PER_SEC < ts->tv_sec) in itimespecfix()
1649 if (ts->tv_sec == 0 && ts->tv_nsec != 0 && ts->tv_nsec < tick * 1000) in itimespecfix()
1650 ts->tv_nsec = tick * 1000; in itimespecfix()
1655 ((uint64_t)(tsp)->tv_sec * NS_PER_SEC + (tsp)->tv_nsec)
1666 struct proc *p; in realtimer_expire_l()
1669 realtimer_clocktime(it->it_clockid, &cts); in realtimer_expire_l()
1671 if (timespeccmp(&cts, &it->it_time.it_value, >=)) { in realtimer_expire_l()
1672 if (timespecisset(&it->it_time.it_interval)) { in realtimer_expire_l()
1673 timespecadd(&it->it_time.it_value, in realtimer_expire_l()
1674 &it->it_time.it_interval, in realtimer_expire_l()
1675 &it->it_time.it_value); in realtimer_expire_l()
1677 interval = timespectons(&it->it_time.it_interval); in realtimer_expire_l()
1678 value = timespectons(&it->it_time.it_value); in realtimer_expire_l()
1685 overruns = howmany(now - value + 1, interval); in realtimer_expire_l()
1686 if (it->it_overrun + overruns >= in realtimer_expire_l()
1687 it->it_overrun && in realtimer_expire_l()
1688 it->it_overrun + overruns <= INT_MAX) { in realtimer_expire_l()
1689 it->it_overrun += (int)overruns; in realtimer_expire_l()
1691 it->it_overrun = INT_MAX; in realtimer_expire_l()
1692 it->it_ksi.ksi_errno = ERANGE; in realtimer_expire_l()
1695 now + interval - (now - value) % interval; in realtimer_expire_l()
1696 it->it_time.it_value = timespecfromns(value); in realtimer_expire_l()
1700 timespecclear(&it->it_time.it_value); in realtimer_expire_l()
1703 p = it->it_proc; in realtimer_expire_l()
1704 if (timespecisset(&it->it_time.it_value)) { in realtimer_expire_l()
1706 it->it_flags |= ITF_PSTOPPED; in realtimer_expire_l()
1708 timespecsub(&it->it_time.it_value, &cts, &ts); in realtimer_expire_l()
1710 callout_reset(&it->it_callout, tvtohz(&tv), in realtimer_expire_l()
1724 } else if (timespecisset(&it->it_time.it_value)) { in realtimer_expire_l()
1725 p = it->it_proc; in realtimer_expire_l()
1727 it->it_flags |= ITF_PSTOPPED; in realtimer_expire_l()
1729 ts = it->it_time.it_value; in realtimer_expire_l()
1732 callout_reset(&it->it_callout, tvtohz(&tv), in realtimer_expire_l()
1748 struct proc *p = it->it_proc; in itimer_fire()
1751 if (it->it_sigev.sigev_notify == SIGEV_SIGNAL || in itimer_fire()
1752 it->it_sigev.sigev_notify == SIGEV_THREAD_ID) { in itimer_fire()
1753 if (sigev_findtd(p, &it->it_sigev, &td) != 0) { in itimer_fire()
1755 timespecclear(&it->it_time.it_value); in itimer_fire()
1756 timespecclear(&it->it_time.it_interval); in itimer_fire()
1757 callout_stop(&it->it_callout); in itimer_fire()
1761 if (!KSI_ONQ(&it->it_ksi)) { in itimer_fire()
1762 it->it_ksi.ksi_errno = 0; in itimer_fire()
1763 ksiginfo_set_sigev(&it->it_ksi, &it->it_sigev); in itimer_fire()
1764 tdsendsignal(p, td, it->it_ksi.ksi_signo, &it->it_ksi); in itimer_fire()
1766 if (it->it_overrun < INT_MAX) in itimer_fire()
1767 it->it_overrun++; in itimer_fire()
1769 it->it_ksi.ksi_errno = ERANGE; in itimer_fire()
1776 itimers_alloc(struct proc *p) in itimers_alloc()
1782 if (p->p_itimers == NULL) { in itimers_alloc()
1783 p->p_itimers = its; in itimers_alloc()
1794 itimers_event_exit_exec(int start_idx, struct proc *p) in itimers_event_exit_exec()
1800 its = p->p_itimers; in itimers_event_exit_exec()
1805 if ((it = its->its_timers[i]) != NULL) in itimers_event_exit_exec()
1808 if (its->its_timers[0] == NULL && its->its_timers[1] == NULL && in itimers_event_exit_exec()
1809 its->its_timers[2] == NULL) { in itimers_event_exit_exec()
1812 p->p_itimers = NULL; in itimers_event_exit_exec()
1819 itimers_exec(struct proc *p) in itimers_exec()
1829 itimers_exit(struct proc *p) in itimers_exit()