include/linux/clocksource.h
Source file repositories/reference/linux-study-clean/include/linux/clocksource.h
File Facts
- System
- Linux kernel
- Corpus path
include/linux/clocksource.h- Extension
.h- Size
- 11900 bytes
- Lines
- 350
- 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.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/types.hlinux/timex.hlinux/time.hlinux/list.hlinux/cache.hlinux/timer.hlinux/init.hlinux/of.hlinux/clocksource_ids.hasm/div64.hasm/io.hasm/clocksource.hvdso/clocksource.h
Detected Declarations
struct clocksource_basestruct clocksourcestruct modulestruct clocksource_hw_snapshotstruct clocksourcestruct clocksource_basefunction clocksource_freq2multfunction clocksource_khz2multfunction clocksource_hz2multfunction cyclesfunction __clocksource_registerfunction clocksource_register_hzfunction clocksource_register_khzfunction devm_clocksource_register_hzfunction devm_clocksource_register_khzfunction clocksource_arch_initfunction timer_probe
Annotated Snippet
struct clocksource_hw_snapshot {
u64 hw_cycles;
enum clocksource_ids hw_csid;
};
/**
* struct clocksource - hardware abstraction for a free running counter
* Provides mostly state-free accessors to the underlying hardware.
* This is the structure used for system time.
*
* @read: Returns a cycle value, passes clocksource as argument
* @mask: Bitmask for two's complement
* subtraction of non 64 bit counters
* @mult: Cycle to nanosecond multiplier
* @shift: Cycle to nanosecond divisor (power of two)
* @max_idle_ns: Maximum idle time permitted by the clocksource (nsecs)
* @maxadj: Maximum adjustment value to mult (~11%)
* @archdata: Optional arch-specific data
* @max_cycles: Maximum safe cycle value which won't overflow on
* multiplication
* @max_raw_delta: Maximum safe delta value for negative motion detection
* @name: Pointer to clocksource name
* @list: List head for registration (internal)
* @freq_khz: Clocksource frequency in khz.
* @rating: Rating value for selection (higher is better)
* To avoid rating inflation the following
* list should give you a guide as to how
* to assign your clocksource a rating
* 1-99: Unfit for real use
* Only available for bootup and testing purposes.
* 100-199: Base level usability.
* Functional for real use, but not desired.
* 200-299: Good.
* A correct and usable clocksource.
* 300-399: Desired.
* A reasonably fast and accurate clocksource.
* 400-499: Perfect
* The ideal clocksource. A must-use where
* available.
* @id: Defaults to CSID_GENERIC. The id value is captured
* in certain snapshot functions to allow callers to
* validate the clocksource from which the snapshot was
* taken.
* @flags: Flags describing special properties
* @base: Hardware abstraction for clock on which a clocksource
* is based
* @read_snapshot: Extended @read() function for clocksources such as
* kvmclock or the Hyper-V scaled TSC where the actual
* clocksource value for timekeeping is calculated from an
* underlying hardware counter. Returns the timekeeping
* relevant cycle value and stores the raw value of the
* underlying counter from which it was calculated
* including the clocksource ID of that counter in the
* clocksource hardware snapshot.
* @enable: Optional function to enable the clocksource
* @disable: Optional function to disable the clocksource
* @suspend: Optional suspend function for the clocksource
* @resume: Optional resume function for the clocksource
* @mark_unstable: Optional function to inform the clocksource driver that
* the watchdog marked the clocksource unstable
* @tick_stable: Optional function called periodically from the watchdog
* code to provide stable synchronization points
* @wd_list: List head to enqueue into the watchdog list (internal)
* @cs_last: Last clocksource value for clocksource watchdog
* @wd_last: Last watchdog value corresponding to @cs_last
* @owner: Module reference, must be set by clocksource in modules
*
* Note: This struct is not used in hotpathes of the timekeeping code
* because the timekeeper caches the hot path fields in its own data
* structure, so no cache line alignment is required,
*
* The pointer to the clocksource itself is handed to the read
* callback. If you need extra information there you can wrap struct
* clocksource into your own struct. Depending on the amount of
* information you need you should consider to cache line align that
* structure.
*/
struct clocksource {
u64 (*read)(struct clocksource *cs);
u64 mask;
u32 mult;
u32 shift;
u64 max_idle_ns;
u32 maxadj;
u64 max_cycles;
u64 max_raw_delta;
const char *name;
struct list_head list;
u32 freq_khz;
int rating;
Annotation
- Immediate include surface: `linux/types.h`, `linux/timex.h`, `linux/time.h`, `linux/list.h`, `linux/cache.h`, `linux/timer.h`, `linux/init.h`, `linux/of.h`.
- Detected declarations: `struct clocksource_base`, `struct clocksource`, `struct module`, `struct clocksource_hw_snapshot`, `struct clocksource`, `struct clocksource_base`, `function clocksource_freq2mult`, `function clocksource_khz2mult`, `function clocksource_hz2mult`, `function cycles`.
- Atlas domain: Core OS / Core Kernel Interface.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.