include/linux/timekeeper_internal.h

Source file repositories/reference/linux-study-clean/include/linux/timekeeper_internal.h

File Facts

System
Linux kernel
Corpus path
include/linux/timekeeper_internal.h
Extension
.h
Size
7488 bytes
Lines
215
Domain
Core OS
Bucket
Core Kernel Interface
Inferred role
Core OS: implementation source
Status
source implementation candidate

Why This File Exists

Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.

Dependency Surface

Detected Declarations

Annotated Snippet

struct tk_read_base {
	struct clocksource	*clock;
	u64			mask;
	u64			cycle_last;
	u32			mult;
	u32			shift;
	u64			xtime_nsec;
	ktime_t			base;
	u64			base_real;
};

/**
 * struct timekeeper - Structure holding internal timekeeping values.
 * @tkr_mono:			The readout base structure for CLOCK_MONOTONIC
 * @xtime_sec:			Current CLOCK_REALTIME time in seconds
 * @ktime_sec:			Current CLOCK_MONOTONIC time in seconds
 * @wall_to_monotonic:		CLOCK_REALTIME to CLOCK_MONOTONIC offset
 * @offs_real:			Offset clock monotonic -> clock realtime
 * @offs_boot:			Offset clock monotonic -> clock boottime
 * @offs_tai:			Offset clock monotonic -> clock tai
 * @offs_aux:			Offset clock monotonic -> clock AUX
 * @coarse_nsec:		The nanoseconds part for coarse time getters
 * @id:				The timekeeper ID
 * @tkr_raw:			The readout base structure for CLOCK_MONOTONIC_RAW
 * @raw_sec:			CLOCK_MONOTONIC_RAW  time in seconds
 * @cs_id:			The ID of the current clocksource
 * @cs_ns_to_cyc_mult:		Multiplicator for nanoseconds to cycles conversion
 * @cs_ns_to_cyc_shift:		Shift value for nanoseconds to cycles conversion
 * @cs_ns_to_cyc_maxns:		Maximum nanoseconds to cyles conversion range
 * @clock_was_set_seq:		The sequence number of clock was set events
 * @cs_was_changed_seq:		The sequence number of clocksource change events
 * @clock_valid:		Indicator for valid clock
 * @monotonic_to_boot:		CLOCK_MONOTONIC to CLOCK_BOOTTIME offset
 * @monotonic_to_aux:		CLOCK_MONOTONIC to CLOCK_AUX offset
 * @cycle_interval:		Number of clock cycles in one NTP interval
 * @xtime_interval:		Number of clock shifted nano seconds in one NTP
 *				interval.
 * @xtime_remainder:		Shifted nano seconds left over when rounding
 *				@cycle_interval
 * @raw_interval:		Shifted raw nano seconds accumulated per NTP interval.
 * @next_leap_ktime:		CLOCK_MONOTONIC time value of a pending leap-second
 * @ntp_tick:			The ntp_tick_length() value currently being
 *				used. This cached copy ensures we consistently
 *				apply the tick length for an entire tick, as
 *				ntp_tick_length may change mid-tick, and we don't
 *				want to apply that new value to the tick in
 *				progress.
 * @ntp_error:			Difference between accumulated time and NTP time in ntp
 *				shifted nano seconds.
 * @ntp_error_shift:		Shift conversion between clock shifted nano seconds and
 *				ntp shifted nano seconds.
 * @ntp_err_mult:		Multiplication factor for scaled math conversion
 * @skip_second_overflow:	Flag used to avoid updating NTP twice with same second
 * @tai_offset:			The current UTC to TAI offset in seconds
 *
 * Note: For timespec(64) based interfaces wall_to_monotonic is what
 * we need to add to xtime (or xtime corrected for sub jiffy times)
 * to get to monotonic time.  Monotonic is pegged at zero at system
 * boot time, so wall_to_monotonic will be negative, however, we will
 * ALWAYS keep the tv_nsec part positive so we can use the usual
 * normalization.
 *
 * wall_to_monotonic is moved after resume from suspend for the
 * monotonic time not to jump. We need to add total_sleep_time to
 * wall_to_monotonic to get the real boot based time offset.
 *
 * wall_to_monotonic is no longer the boot time, getboottime must be
 * used instead.
 *
 * @monotonic_to_boottime is a timespec64 representation of @offs_boot to
 * accelerate the VDSO update for CLOCK_BOOTTIME.
 *
 * @offs_aux is used by the auxiliary timekeepers which do not utilize any
 * of the regular timekeeper offset fields.
 *
 * @monotonic_to_aux is a timespec64 representation of @offs_aux to
 * accelerate the VDSO update for CLOCK_AUX.
 *
 * The cacheline ordering of the structure is optimized for in kernel usage of
 * the ktime_get() and ktime_get_ts64() family of time accessors. Struct
 * timekeeper is prepended in the core timekeeping code with a sequence count,
 * which results in the following cacheline layout:
 *
 * 0:	seqcount, tkr_mono
 * 1:	xtime_sec ... id
 * 2:	tkr_raw, raw_sec
 * 3,4: Internal variables
 *
 * Cacheline 0,1 contain the data which is used for accessing
 * CLOCK_MONOTONIC/REALTIME/BOOTTIME/TAI, while cacheline 2 contains the

Annotation

Implementation Notes