rust/kernel/time/hrtimer.rs
Source file repositories/reference/linux-study-clean/rust/kernel/time/hrtimer.rs
File Facts
- System
- Linux kernel
- Corpus path
rust/kernel/time/hrtimer.rs- Extension
.rs- Size
- 39448 bytes
- Lines
- 1121
- Domain
- Rust Kernel Layer
- Bucket
- Rust API Membrane
- Inferred role
- Rust Kernel Layer: implementation source
- Status
- source implementation candidate
Why This File Exists
Rust-side wrappers and abstractions around kernel C APIs, ownership contracts, allocation, synchronization, and module integration.
- Rust-side wrappers and abstractions around kernel C APIs, ownership contracts, allocation, synchronization, and module integration.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
- No C-style include directives detected by the generator.
Detected Declarations
function start
Annotated Snippet
unsafe fn start(this: *const Self, expires: <Self::TimerMode as HrTimerMode>::Expires) {
// SAFETY: By function safety requirement, `this` is a valid `Self`.
unsafe {
bindings::hrtimer_start_range_ns(
Self::c_timer_ptr(this).cast_mut(),
expires.as_nanos(),
0,
<Self::TimerMode as HrTimerMode>::C_MODE,
);
}
}
}
/// Restart policy for timers.
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
#[repr(u32)]
pub enum HrTimerRestart {
/// Timer should not be restarted.
NoRestart = bindings::hrtimer_restart_HRTIMER_NORESTART,
/// Timer should be restarted.
Restart = bindings::hrtimer_restart_HRTIMER_RESTART,
}
impl HrTimerRestart {
fn into_c(self) -> bindings::hrtimer_restart {
self as bindings::hrtimer_restart
}
}
/// Time representations that can be used as expiration values in [`HrTimer`].
pub trait HrTimerExpires {
/// Converts the expiration time into a nanosecond representation.
///
/// This value corresponds to a raw ktime_t value, suitable for passing to kernel
/// timer functions. The interpretation (absolute vs relative) depends on the
/// associated [HrTimerMode] in use.
fn as_nanos(&self) -> i64;
}
impl<C: ClockSource> HrTimerExpires for Instant<C> {
#[inline]
fn as_nanos(&self) -> i64 {
Instant::<C>::as_nanos(self)
}
}
impl HrTimerExpires for Delta {
#[inline]
fn as_nanos(&self) -> i64 {
Delta::as_nanos(*self)
}
}
mod private {
use crate::time::ClockSource;
pub trait Sealed {}
impl<C: ClockSource> Sealed for super::AbsoluteMode<C> {}
impl<C: ClockSource> Sealed for super::RelativeMode<C> {}
impl<C: ClockSource> Sealed for super::AbsolutePinnedMode<C> {}
impl<C: ClockSource> Sealed for super::RelativePinnedMode<C> {}
impl<C: ClockSource> Sealed for super::AbsoluteSoftMode<C> {}
impl<C: ClockSource> Sealed for super::RelativeSoftMode<C> {}
impl<C: ClockSource> Sealed for super::AbsolutePinnedSoftMode<C> {}
impl<C: ClockSource> Sealed for super::RelativePinnedSoftMode<C> {}
impl<C: ClockSource> Sealed for super::AbsoluteHardMode<C> {}
impl<C: ClockSource> Sealed for super::RelativeHardMode<C> {}
impl<C: ClockSource> Sealed for super::AbsolutePinnedHardMode<C> {}
impl<C: ClockSource> Sealed for super::RelativePinnedHardMode<C> {}
}
/// Operational mode of [`HrTimer`].
pub trait HrTimerMode: private::Sealed {
/// The C representation of hrtimer mode.
const C_MODE: bindings::hrtimer_mode;
/// Type representing the clock source.
type Clock: ClockSource;
/// Type representing the expiration specification (absolute or relative time).
type Expires: HrTimerExpires;
}
/// Timer that expires at a fixed point in time.
pub struct AbsoluteMode<C: ClockSource>(PhantomData<C>);
impl<C: ClockSource> HrTimerMode for AbsoluteMode<C> {
const C_MODE: bindings::hrtimer_mode = bindings::hrtimer_mode_HRTIMER_MODE_ABS;
Annotation
- Detected declarations: `function start`.
- Atlas domain: Rust Kernel Layer / Rust API Membrane.
- 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.