ADJTIMEX(2) - man page online | system calls

Tune kernel clock.

ADJTIMEX(2)                         Linux Programmer's Manual                         ADJTIMEX(2)


adjtimex - tune kernel clock


#define _BSD_SOURCE /* See feature_test_macros(7) */ #include <sys/timex.h> int adjtimex(struct timex *buf);


Linux uses David L. Mills' clock adjustment algorithm (see RFC 5905). The system call adjtimex() reads and optionally sets adjustment parameters for this algorithm. It takes a pointer to a timex structure, updates kernel parameters from field values, and returns the same structure with current kernel values. This structure is declared as follows: struct timex { int modes; /* Mode selector */ long offset; /* Time offset; nanoseconds, if STA_NANO status flag is set, otherwise microseconds */ long freq; /* Frequency offset, in units of 2^-16 ppm (parts per million, see NOTES below) */ long maxerror; /* Maximum error (microseconds) */ long esterror; /* Estimated error (microseconds) */ int status; /* Clock command/status */ long constant; /* PLL (phase-locked loop) time constant */ long precision; /* Clock precision (microseconds, read-only) */ long tolerance; /* Clock frequency tolerance (ppm, read-only) */ struct timeval time; /* Current time (read-only, except for ADJ_SETOFFSET); upon return, time.tv_usec contains nanoseconds, if STA_NANO status flag is set, otherwise microseconds */ long tick; /* Microseconds between clock ticks */ long ppsfreq; /* PPS (pulse per second) frequency (in units of 2^-16 ppm--see NOTES, read-only) */ long jitter; /* PPS jitter (read-only); nanoseconds, if STA_NANO status flag is set, otherwise microseconds */ int shift; /* PPS interval duration (seconds, read-only) */ long stabil; /* PPS stability (2^-16 ppm--see NOTES, read-only) */ long jitcnt; /* PPS jitter limit exceeded (read-only) */ long calcnt; /* PPS calibration intervals (read-only) */ long errcnt; /* PPS calibration errors (read-only) */ long stbcnt; /* PPS stability limit exceeded (read-only) */ int tai; /* TAI offset, as set by previous ADJ_TAI operation (seconds, read-only, since Linux 2.6.26) */ /* Further padding bytes to allow for future expansion */ }; The modes field determines which parameters, if any, to set. It is a bit mask containing a bitwise-or combination of zero or more of the following bits: ADJ_OFFSET Set time offset from buf.offset. ADJ_FREQUENCY Set frequency offset from buf.freq. ADJ_MAXERROR Set maximum time error from buf.maxerror. ADJ_ESTERROR Set estimated time error from buf.esterror. ADJ_STATUS Set clock status from buf.status. ADJ_TIMECONST Set PLL time constant from buf.constant. If the STA_NANO status flag (see below) is clear, the kernel adds 4 to this value. ADJ_SETOFFSET (since Linux 2.6.29) Add buf.time to the current time. If buf.status includes the ADJ_NANO flag, then buf.time.tv_usec is interpreted as a nanosecond value; otherwise it is interpreted as microseconds. ADJ_MICRO (since Linux 2.6.36) Select microsecond resolution. ADJ_NANO (since Linux 2.6.36) Select nanosecond resolution. Only one of ADJ_MICRO and ADJ_NANO should be speci‐ fied. ADJ_TAI (since Linux 2.6.26) Set TAI (Atomic International Time) offset from buf->constant. ADJ_TAI should not be used in conjunction with ADJ_TIMECONST, since the latter mode also employs the buf->constant field. For a complete explanation of TAI and the difference between TAI and UTC, see BIPM ⟨⟩ ADJ_TICK Set tick value from buf.tick. Alternatively, modes can be specified as either of the following (multibit mask) values, in which case other bits should not be specified in modes: ADJ_OFFSET_SINGLESHOT Old-fashioned adjtime(): (gradually) adjust time by value specified in buf.offset, which specifies an adjustment in microseconds. ADJ_OFFSET_SS_READ (functional since Linux 2.6.28) Return (in buf.offset) the remaining amount of time to be adjusted after an earlier ADJ_OFFSET_SINGLESHOT operation. This feature was added in Linux 2.6.24, but did not work correctly until Linux 2.6.28. Ordinary users are restricted to a value of either 0 or ADJ_OFFSET_SS_READ for modes. Only the superuser may set any parameters. The buf.status field is a bit mask that is used to set and/or retrieve status bits associ‐ ated with the NTP implementation. Some bits in the mask are both readable and settable, while others are read-only. STA_PLL Enable phase-locked loop (PLL) updates (read-write) via ADJ_OFFSET. STA_PPSFREQ Enable PPS freq discipline (read-write). STA_PPSTIME Enable PPS time discipline (read-write). STA_FLL Select frequency-locked loop (FLL) mode (read-write). STA_INS Insert leap second (read-write). STA_DEL Delete leap second (read-write). STA_UNSYNC Clock unsynchronized (read-write). STA_FREQHOLD Hold frequency (read-write). STA_PPSSIGNAL PPS signal present (read-only). STA_PPSJITTER PPS signal jitter exceeded (read-only). STA_PPSWANDER PPS signal wander exceeded (read-only). STA_PPSERROR PPS signal calibration error (read-only). STA_CLOCKERR Clock hardware fault (read-only). STA_NANO (since Linux 2.6.26) Resolution (0 = microsecond, 1 = nanoseconds; read-only). Set via ADJ_NANO, cleared via ADJ_MICRO. STA_MODE (since Linux 2.6.26) Mode (0 = Phase Locked Loop, 1 = Frequency Locked Loop; read-only). STA_CLK (since Linux 2.6.26) Clock source (0 = A, 1 = B; read-only). Attempts to set read-only status bits are silently ignored.


On success, adjtimex() returns the clock state; that is, one of the following values: TIME_OK Clock synchronized. TIME_INS Insert leap second. TIME_DEL Delete leap second. TIME_OOP Leap second in progress. TIME_WAIT Leap second has occurred. TIME_ERROR Clock not synchronized. The symbolic name TIME_BAD is a synonym for TIME_ERROR, provided for backward compatibility. On failure, adjtimex() returns -1 and sets errno.


EFAULT buf does not point to writable memory. EINVAL An attempt was made to set buf.offset to a value outside the range -131071 to +131071, or to set buf.status to a value other than those listed above, or to set buf.tick to a value outside the range 900000/HZ to 1100000/HZ, where HZ is the sys‐ tem timer interrupt frequency. EPERM buf.modes is neither 0 nor ADJ_OFFSET_SS_READ, and the caller does not have suffi‐ cient privilege. Under Linux, the CAP_SYS_TIME capability is required.


In struct timex, freq, ppsfreq, and stabil are ppm (parts per million) with a 16-bit frac‐ tional part, which means that a value of 1 in one of those fields actually means 2^-16 ppm, and 2^16=65536 is 1 ppm. This is the case for both input values (in the case of freq) and output values.


adjtimex() is Linux-specific and should not be used in programs intended to be portable. See adjtime(3) for a more portable, but less flexible, method of adjusting the system clock.


settimeofday(2), adjtime(3), capabilities(7), time(7), adjtimex(8)


This page is part of release 4.04 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at
Linux 2014-12-31 ADJTIMEX(2)
This manual Reference Other manuals
adjtimex(2) referred by adjtime(3) | adjtimex(8) | busybox(1) | capabilities(7) | explain(1) | explain(3) | explain_adjtimex(3) | explain_adjtimex_or_die(3) | gettimeofday(2) | rtc(4) | syscalls(2) | time(7)
refer to adjtime(3) | adjtimex(8) | capabilities(7) | feature_test_macros(7) | gettimeofday(2) | time(7)