|
FreeBSD kernel kern code
|
#include <sys/cdefs.h>#include <sys/param.h>#include <sys/systm.h>#include <sys/limits.h>#include <sys/clock.h>#include <sys/lock.h>#include <sys/mutex.h>#include <sys/sysproto.h>#include <sys/eventhandler.h>#include <sys/resourcevar.h>#include <sys/signalvar.h>#include <sys/kernel.h>#include <sys/syscallsubr.h>#include <sys/sysctl.h>#include <sys/sysent.h>#include <sys/priv.h>#include <sys/proc.h>#include <sys/posix4.h>#include <sys/time.h>#include <sys/timers.h>#include <sys/timetc.h>#include <sys/vnode.h>#include <vm/vm.h>#include <vm/vm_extern.h>
Go to the source code of this file.
Data Structures | |
| struct | clock_getcpuclockid2_args |
| struct | clock_gettime_args |
| struct | clock_settime_args |
| struct | clock_getres_args |
| struct | nanosleep_args |
| struct | gettimeofday_args |
| struct | settimeofday_args |
| struct | getitimer_args |
| struct | setitimer_args |
| struct | ktimer_create_args |
| struct | ktimer_delete_args |
| struct | ktimer_settime_args |
| struct | ktimer_gettime_args |
| struct | timer_getoverrun_args |
Macros | |
| #define | MAX_CLOCKS (CLOCK_MONOTONIC+1) |
| #define | CPUCLOCK_BIT 0x80000000 |
| #define | CPUCLOCK_PROCESS_BIT 0x40000000 |
| #define | CPUCLOCK_ID_MASK (~(CPUCLOCK_BIT|CPUCLOCK_PROCESS_BIT)) |
| #define | MAKE_THREAD_CPUCLOCK(tid) (CPUCLOCK_BIT|(tid)) |
| #define | MAKE_PROCESS_CPUCLOCK(pid) (CPUCLOCK_BIT|CPUCLOCK_PROCESS_BIT|(pid)) |
| #define | CLOCK_CALL(clock, call, arglist) ((*posix_clocks[clock].call) arglist) |
Functions | |
| __FBSDID ("$BSDSUniX$") | |
| static int | settime (struct thread *, struct timeval *) |
| static void | timevalfix (struct timeval *) |
| static void | itimer_start (void) |
| static int | itimer_init (void *, int, int) |
| static void | itimer_fini (void *, int) |
| static void | itimer_enter (struct itimer *) |
| static void | itimer_leave (struct itimer *) |
| static struct itimer * | itimer_find (struct proc *, int) |
| static void | itimers_alloc (struct proc *) |
| static void | itimers_event_hook_exec (void *arg, struct proc *p, struct image_params *imgp) |
| static void | itimers_event_hook_exit (void *arg, struct proc *p) |
| static int | realtimer_create (struct itimer *) |
| static int | realtimer_gettime (struct itimer *, struct itimerspec *) |
| static int | realtimer_settime (struct itimer *, int, struct itimerspec *, struct itimerspec *) |
| static int | realtimer_delete (struct itimer *) |
| static void | realtimer_clocktime (clockid_t, struct timespec *) |
| static void | realtimer_expire (void *) |
| int | register_posix_clock (int, struct kclock *) |
| void | itimer_fire (struct itimer *it) |
| int | itimespecfix (struct timespec *ts) |
| SYSINIT (posix_timer, SI_SUB_P1003_1B, SI_ORDER_FIRST+4, itimer_start, NULL) | |
| int | sys_clock_getcpuclockid2 (struct thread *td, struct clock_getcpuclockid2_args *uap) |
| int | kern_clock_getcpuclockid2 (struct thread *td, id_t id, int which, clockid_t *clk_id) |
| int | sys_clock_gettime (struct thread *td, struct clock_gettime_args *uap) |
| static void | cputick2timespec (uint64_t runtime, struct timespec *ats) |
| static void | get_thread_cputime (struct thread *targettd, struct timespec *ats) |
| static void | get_process_cputime (struct proc *targetp, struct timespec *ats) |
| static int | get_cputime (struct thread *td, clockid_t clock_id, struct timespec *ats) |
| int | kern_clock_gettime (struct thread *td, clockid_t clock_id, struct timespec *ats) |
| int | sys_clock_settime (struct thread *td, struct clock_settime_args *uap) |
| int | kern_clock_settime (struct thread *td, clockid_t clock_id, struct timespec *ats) |
| int | sys_clock_getres (struct thread *td, struct clock_getres_args *uap) |
| int | kern_clock_getres (struct thread *td, clockid_t clock_id, struct timespec *ts) |
| int | kern_nanosleep (struct thread *td, struct timespec *rqt, struct timespec *rmt) |
| int | sys_nanosleep (struct thread *td, struct nanosleep_args *uap) |
| int | sys_gettimeofday (struct thread *td, struct gettimeofday_args *uap) |
| int | sys_settimeofday (struct thread *td, struct settimeofday_args *uap) |
| int | kern_settimeofday (struct thread *td, struct timeval *tv, struct timezone *tzp) |
| int | sys_getitimer (struct thread *td, struct getitimer_args *uap) |
| int | kern_getitimer (struct thread *td, u_int which, struct itimerval *aitv) |
| int | sys_setitimer (struct thread *td, struct setitimer_args *uap) |
| int | kern_setitimer (struct thread *td, u_int which, struct itimerval *aitv, struct itimerval *oitv) |
| void | realitexpire (void *arg) |
| int | itimerfix (struct timeval *tv) |
| int | itimerdecr (struct itimerval *itp, int usec) |
| void | timevaladd (struct timeval *t1, const struct timeval *t2) |
| void | timevalsub (struct timeval *t1, const struct timeval *t2) |
| int | ratecheck (struct timeval *lasttime, const struct timeval *mininterval) |
| int | ppsratecheck (struct timeval *lasttime, int *curpps, int maxpps) |
| int | sys_ktimer_create (struct thread *td, struct ktimer_create_args *uap) |
| int | kern_ktimer_create (struct thread *td, clockid_t clock_id, struct sigevent *evp, int *timerid, int preset_id) |
| int | sys_ktimer_delete (struct thread *td, struct ktimer_delete_args *uap) |
| int | kern_ktimer_delete (struct thread *td, int timerid) |
| int | sys_ktimer_settime (struct thread *td, struct ktimer_settime_args *uap) |
| int | kern_ktimer_settime (struct thread *td, int timer_id, int flags, struct itimerspec *val, struct itimerspec *oval) |
| int | sys_ktimer_gettime (struct thread *td, struct ktimer_gettime_args *uap) |
| int | kern_ktimer_gettime (struct thread *td, int timer_id, struct itimerspec *val) |
| int | sys_ktimer_getoverrun (struct thread *td, struct ktimer_getoverrun_args *uap) |
| int | kern_ktimer_getoverrun (struct thread *td, int timer_id) |
| int | itimer_accept (struct proc *p, int timerid, ksiginfo_t *ksi) |
| static void | itimers_event_hook_exec (void *arg, struct proc *p, struct image_params *imgp __unused) |
Variables | |
| static struct kclock | posix_clocks [MAX_CLOCKS] |
| static uma_zone_t | itimer_zone = NULL |
| static int | nanowait |
| #define CLOCK_CALL | ( | clock, | |
| call, | |||
| arglist | |||
| ) | ((*posix_clocks[clock].call) arglist) |
Definition at line 105 of file kern_time.c.
Referenced by itimers_event_hook_exit(), kern_ktimer_create(), kern_ktimer_delete(), kern_ktimer_gettime(), and kern_ktimer_settime().
| #define CPUCLOCK_BIT 0x80000000 |
Definition at line 61 of file kern_time.c.
| #define CPUCLOCK_ID_MASK (~(CPUCLOCK_BIT|CPUCLOCK_PROCESS_BIT)) |
Definition at line 63 of file kern_time.c.
Referenced by get_cputime().
| #define CPUCLOCK_PROCESS_BIT 0x40000000 |
Definition at line 62 of file kern_time.c.
Referenced by get_cputime().
| #define MAKE_PROCESS_CPUCLOCK | ( | pid | ) | (CPUCLOCK_BIT|CPUCLOCK_PROCESS_BIT|(pid)) |
Definition at line 65 of file kern_time.c.
Referenced by kern_clock_getcpuclockid2().
| #define MAKE_THREAD_CPUCLOCK | ( | tid | ) | (CPUCLOCK_BIT|(tid)) |
Definition at line 64 of file kern_time.c.
Referenced by kern_clock_getcpuclockid2().
| #define MAX_CLOCKS (CLOCK_MONOTONIC+1) |
Definition at line 60 of file kern_time.c.
Referenced by itimers_event_hook_exit(), kern_ktimer_create(), and register_posix_clock().
| __FBSDID | ( | "$BSDSUniX$" | ) |
|
inlinestatic |
Definition at line 242 of file kern_time.c.
References cputick2usec().
Referenced by get_process_cputime(), and get_thread_cputime().


|
static |
Definition at line 283 of file kern_time.c.
References CPUCLOCK_ID_MASK, CPUCLOCK_PROCESS_BIT, get_process_cputime(), get_thread_cputime(), pget(), and tdfind().
Referenced by kern_clock_gettime().


|
static |
Definition at line 270 of file kern_time.c.
References cputick2timespec(), and rufetch().
Referenced by get_cputime(), and kern_clock_gettime().


|
static |
Definition at line 250 of file kern_time.c.
References cpu_ticks, cputick2timespec(), critical_enter(), and critical_exit().
Referenced by get_cputime(), and kern_clock_gettime().


| int itimer_accept | ( | struct proc * | p, |
| int | timerid, | ||
| ksiginfo_t * | ksi | ||
| ) |
Definition at line 1468 of file kern_time.c.
References itimer_find().
Referenced by kern_sigtimedwait(), and postsig().


|
static |
Definition at line 1023 of file kern_time.c.
Referenced by kern_ktimer_gettime(), kern_ktimer_settime(), and realtimer_expire().

|
static |
Definition at line 1194 of file kern_time.c.
Referenced by itimer_accept(), kern_ktimer_delete(), kern_ktimer_getoverrun(), kern_ktimer_gettime(), and kern_ktimer_settime().

|
static |
Definition at line 1014 of file kern_time.c.
References mtx_destroy().
Referenced by itimer_start().


| void itimer_fire | ( | struct itimer * | it | ) |
Definition at line 1545 of file kern_time.c.
References sigev_findtd(), and tdsendsignal().
Referenced by realtimer_expire().


|
static |
Definition at line 1004 of file kern_time.c.
References mtx_init().
Referenced by itimer_start().


|
static |
Definition at line 1031 of file kern_time.c.
References wakeup().
Referenced by kern_ktimer_gettime(), kern_ktimer_settime(), and realtimer_expire().


|
static |
Definition at line 969 of file kern_time.c.
References itimer_fini(), itimer_init(), itimer_zone, itimers_event_hook_exec(), itimers_event_hook_exit(), p31b_setcfg(), realtimer_create(), realtimer_delete(), realtimer_gettime(), realtimer_settime(), and register_posix_clock().

| int itimerdecr | ( | struct itimerval * | itp, |
| int | usec | ||
| ) |
Definition at line 838 of file kern_time.c.
Referenced by hardclock_cnt(), and hardclock_cpu().

| int itimerfix | ( | struct timeval * | tv | ) |
Definition at line 817 of file kern_time.c.
References tick.
Referenced by kern_aio_suspend(), kern_aio_waitcomplete(), kern_select(), kern_setitimer(), kqueue_scan(), selsocket(), and sys_poll().

|
static |
Definition at line 1575 of file kern_time.c.
References free(), and malloc().
Referenced by kern_ktimer_create().


|
static |
|
static |
Definition at line 1598 of file kern_time.c.
References itimers_event_hook_exit().

|
static |
Definition at line 1605 of file kern_time.c.
References CLOCK_CALL, free(), kern_ktimer_delete(), MAX_CLOCKS, panic(), and posix_clocks.
Referenced by itimer_start(), and itimers_event_hook_exec().


| int itimespecfix | ( | struct timespec * | ts | ) |
Definition at line 1485 of file kern_time.c.
References tick.
Referenced by realtimer_settime().

| int kern_clock_getcpuclockid2 | ( | struct thread * | td, |
| id_t | id, | ||
| int | which, | ||
| clockid_t * | clk_id | ||
| ) |
Definition at line 191 of file kern_time.c.
References MAKE_PROCESS_CPUCLOCK, MAKE_THREAD_CPUCLOCK, and pget().
Referenced by sys_clock_getcpuclockid2().


| int kern_clock_getres | ( | struct thread * | td, |
| clockid_t | clock_id, | ||
| struct timespec * | ts | ||
| ) |
Definition at line 430 of file kern_time.c.
References cpu_tickrate(), hz, and tc_getfrequency().
Referenced by sys_clock_getres().


| int kern_clock_gettime | ( | struct thread * | td, |
| clockid_t | clock_id, | ||
| struct timespec * | ats | ||
| ) |
Definition at line 311 of file kern_time.c.
References calcru(), get_cputime(), get_process_cputime(), get_thread_cputime(), getnanotime(), getnanouptime(), nanotime(), nanouptime(), time_second, and timevaladd().
Referenced by do_cv_wait(), and sys_clock_gettime().


| int kern_clock_settime | ( | struct thread * | td, |
| clockid_t | clock_id, | ||
| struct timespec * | ats | ||
| ) |
Definition at line 391 of file kern_time.c.
References priv_check(), and settime().
Referenced by sys_clock_settime().


| int kern_getitimer | ( | struct thread * | td, |
| u_int | which, | ||
| struct itimerval * | aitv | ||
| ) |
Definition at line 664 of file kern_time.c.
References getmicrouptime(), and timevalsub().
Referenced by kern_setitimer(), and sys_getitimer().


| int kern_ktimer_create | ( | struct thread * | td, |
| clockid_t | clock_id, | ||
| struct sigevent * | evp, | ||
| int * | timerid, | ||
| int | preset_id | ||
| ) |
Definition at line 1073 of file kern_time.c.
References CLOCK_CALL, itimer_zone, itimers_alloc(), MAX_CLOCKS, and posix_clocks.
Referenced by sys_ktimer_create().


| int kern_ktimer_delete | ( | struct thread * | td, |
| int | timerid | ||
| ) |
Definition at line 1213 of file kern_time.c.
References CLOCK_CALL, itimer_find(), itimer_zone, and sigqueue_take().
Referenced by itimers_event_hook_exit(), sys_ktimer_create(), and sys_ktimer_delete().


| int kern_ktimer_getoverrun | ( | struct thread * | td, |
| int | timer_id | ||
| ) |
Definition at line 1345 of file kern_time.c.
References itimer_find().
Referenced by sys_ktimer_getoverrun().


| int kern_ktimer_gettime | ( | struct thread * | td, |
| int | timer_id, | ||
| struct itimerspec * | val | ||
| ) |
Definition at line 1311 of file kern_time.c.
References CLOCK_CALL, itimer_enter(), itimer_find(), and itimer_leave().
Referenced by sys_ktimer_gettime().


| int kern_ktimer_settime | ( | struct thread * | td, |
| int | timer_id, | ||
| int | flags, | ||
| struct itimerspec * | val, | ||
| struct itimerspec * | oval | ||
| ) |
Definition at line 1269 of file kern_time.c.
References CLOCK_CALL, itimer_enter(), itimer_find(), and itimer_leave().
Referenced by sys_ktimer_settime().


| int kern_nanosleep | ( | struct thread * | td, |
| struct timespec * | rqt, | ||
| struct timespec * | rmt | ||
| ) |
Definition at line 479 of file kern_time.c.
References getnanouptime(), nanowait, ts, and tvtohz().
Referenced by sys_nanosleep().


| int kern_setitimer | ( | struct thread * | td, |
| u_int | which, | ||
| struct itimerval * | aitv, | ||
| struct itimerval * | oitv | ||
| ) |
Definition at line 723 of file kern_time.c.
References getmicrouptime(), itimerfix(), kern_getitimer(), realitexpire(), timevaladd(), timevalsub(), and tvtohz().
Referenced by sys_setitimer().


| int kern_settimeofday | ( | struct thread * | td, |
| struct timeval * | tv, | ||
| struct timezone * | tzp | ||
| ) |
Definition at line 604 of file kern_time.c.
References priv_check(), settime(), tz_dsttime, and tz_minuteswest.
Referenced by sys_settimeofday().


| int ppsratecheck | ( | struct timeval * | lasttime, |
| int * | curpps, | ||
| int | maxpps | ||
| ) |
Definition at line 948 of file kern_time.c.
Referenced by falloc_noinstall(), fork1(), ithread_execute_handlers(), malloc(), pipespace_new(), and vfs_mountroot_wait().

| int ratecheck | ( | struct timeval * | lasttime, |
| const struct timeval * | mininterval | ||
| ) |
Definition at line 911 of file kern_time.c.
References getmicrouptime(), and timevalsub().
Referenced by sonewconn().


| void realitexpire | ( | void * | arg | ) |
Definition at line 782 of file kern_time.c.
References getmicrouptime(), kern_psignal(), timevaladd(), timevalsub(), tvtohz(), and wakeup().
Referenced by kern_setitimer().


|
static |
Definition at line 1459 of file kern_time.c.
References getnanotime(), and getnanouptime().
Referenced by realtimer_expire(), realtimer_gettime(), and realtimer_settime().


|
static |
Definition at line 1366 of file kern_time.c.
Referenced by itimer_start().

|
static |
Definition at line 1373 of file kern_time.c.
Referenced by itimer_start().

|
static |
Definition at line 1497 of file kern_time.c.
References itimer_enter(), itimer_fire(), itimer_leave(), realtimer_clocktime(), and tvtohz().
Referenced by realtimer_settime().


|
static |
Definition at line 1390 of file kern_time.c.
References realtimer_clocktime().
Referenced by itimer_start(), and realtimer_settime().


|
static |
Definition at line 1411 of file kern_time.c.
References itimespecfix(), realtimer_clocktime(), realtimer_expire(), realtimer_gettime(), tvtohz(), and value.
Referenced by itimer_start().


| int register_posix_clock | ( | int | clockid, |
| struct kclock * | clk | ||
| ) |
Definition at line 993 of file kern_time.c.
References MAX_CLOCKS, posix_clocks, and printf().
Referenced by itimer_start().


|
static |
Definition at line 112 of file kern_time.c.
References Giant, microtime(), printf(), resettodr(), securelevel_gt(), tc_setclock(), and timevalsub().
Referenced by kern_clock_settime(), and kern_settimeofday().


| int sys_clock_getcpuclockid2 | ( | struct thread * | td, |
| struct clock_getcpuclockid2_args * | uap | ||
| ) |
Definition at line 179 of file kern_time.c.
References clock_getcpuclockid2_args::clock_id, clock_getcpuclockid2_args::id, kern_clock_getcpuclockid2(), and clock_getcpuclockid2_args::which.

| int sys_clock_getres | ( | struct thread * | td, |
| struct clock_getres_args * | uap | ||
| ) |
Definition at line 415 of file kern_time.c.
References clock_getres_args::clock_id, kern_clock_getres(), and clock_getres_args::tp.

| int sys_clock_gettime | ( | struct thread * | td, |
| struct clock_gettime_args * | uap | ||
| ) |
Definition at line 229 of file kern_time.c.
References clock_gettime_args::clock_id, kern_clock_gettime(), and clock_gettime_args::tp.

| int sys_clock_settime | ( | struct thread * | td, |
| struct clock_settime_args * | uap | ||
| ) |
Definition at line 380 of file kern_time.c.
References clock_settime_args::clock_id, kern_clock_settime(), and clock_settime_args::tp.

| int sys_getitimer | ( | struct thread * | td, |
| struct getitimer_args * | uap | ||
| ) |
Definition at line 652 of file kern_time.c.
References getitimer_args::itv, kern_getitimer(), and getitimer_args::which.
Referenced by sys_setitimer().


| int sys_gettimeofday | ( | struct thread * | td, |
| struct gettimeofday_args * | uap | ||
| ) |
Definition at line 554 of file kern_time.c.
References microtime(), gettimeofday_args::tp, tz_dsttime, tz_minuteswest, and gettimeofday_args::tzp.

| int sys_ktimer_create | ( | struct thread * | td, |
| struct ktimer_create_args * | uap | ||
| ) |
Definition at line 1049 of file kern_time.c.
References ktimer_create_args::clock_id, ktimer_create_args::evp, kern_ktimer_create(), kern_ktimer_delete(), and ktimer_create_args::timerid.

| int sys_ktimer_delete | ( | struct thread * | td, |
| struct ktimer_delete_args * | uap | ||
| ) |
Definition at line 1187 of file kern_time.c.
References kern_ktimer_delete(), and ktimer_delete_args::timerid.

| int sys_ktimer_getoverrun | ( | struct thread * | td, |
| struct ktimer_getoverrun_args * | uap | ||
| ) |
Definition at line 1338 of file kern_time.c.
References kern_ktimer_getoverrun().

| int sys_ktimer_gettime | ( | struct thread * | td, |
| struct ktimer_gettime_args * | uap | ||
| ) |
Definition at line 1299 of file kern_time.c.
References kern_ktimer_gettime(), ktimer_gettime_args::timerid, and ktimer_gettime_args::value.

| int sys_ktimer_settime | ( | struct thread * | td, |
| struct ktimer_settime_args * | uap | ||
| ) |
Definition at line 1253 of file kern_time.c.
References ktimer_settime_args::flags, kern_ktimer_settime(), ktimer_settime_args::ovalue, ktimer_settime_args::timerid, and ktimer_settime_args::value.

| int sys_nanosleep | ( | struct thread * | td, |
| struct nanosleep_args * | uap | ||
| ) |
Definition at line 523 of file kern_time.c.
References kern_nanosleep(), nanosleep_args::rmtp, and nanosleep_args::rqtp.

| int sys_setitimer | ( | struct thread * | td, |
| struct setitimer_args * | uap | ||
| ) |
Definition at line 704 of file kern_time.c.
References setitimer_args::itv, kern_setitimer(), setitimer_args::oitv, sys_getitimer(), and setitimer_args::which.

| int sys_settimeofday | ( | struct thread * | td, |
| struct settimeofday_args * | uap | ||
| ) |
Definition at line 580 of file kern_time.c.
References kern_settimeofday(), settimeofday_args::tv, and settimeofday_args::tzp.

| SYSINIT | ( | posix_timer | , |
| SI_SUB_P1003_1B | , | ||
| SI_ORDER_FIRST+ | 4, | ||
| itimer_start | , | ||
| NULL | |||
| ) |
| void timevaladd | ( | struct timeval * | t1, |
| const struct timeval * | t2 | ||
| ) |
Definition at line 876 of file kern_time.c.
References timevalfix().
Referenced by acct_process(), fill_kinfo_proc_only(), kern_clock_gettime(), kern_select(), kern_setitimer(), kqueue_scan(), realitexpire(), selsocket(), sys_poll(), and ttydisc_read_raw_read_timer().


|
static |
Definition at line 894 of file kern_time.c.
Referenced by timevaladd(), and timevalsub().

| void timevalsub | ( | struct timeval * | t1, |
| const struct timeval * | t2 | ||
| ) |
Definition at line 885 of file kern_time.c.
References timevalfix().
Referenced by acct_process(), kern_getitimer(), kern_select(), kern_setitimer(), kqueue_scan(), ratecheck(), realitexpire(), selsocket(), settime(), sys_poll(), tty_info(), and ttydisc_read_raw_read_timer().


|
static |
Definition at line 69 of file kern_time.c.
Referenced by itimer_start(), kern_ktimer_create(), and kern_ktimer_delete().
|
static |
Definition at line 476 of file kern_time.c.
Referenced by kern_nanosleep().
|
static |
Definition at line 68 of file kern_time.c.
Referenced by itimers_event_hook_exit(), kern_ktimer_create(), and register_posix_clock().