[PATCH 1/5] rust: task: add safe schedule_timeout() wrapper
From: Danilo Krummrich
Date: Sun Jul 26 2026 - 18:36:37 EST
Add a safe wrapper around schedule_timeout() that takes and returns
Jiffies, handling the c_long conversion internally.
Signed-off-by: Danilo Krummrich <dakr@xxxxxxxxxx>
---
rust/kernel/task.rs | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/rust/kernel/task.rs b/rust/kernel/task.rs
index 38273f4eedb5..0d63beb3fb37 100644
--- a/rust/kernel/task.rs
+++ b/rust/kernel/task.rs
@@ -10,6 +10,7 @@
pid_namespace::PidNamespace,
prelude::*,
sync::aref::ARef,
+ time::Jiffies,
types::{NotThreadSafe, Opaque},
};
use core::{
@@ -20,6 +21,18 @@
/// A sentinel value used for infinite timeouts.
pub const MAX_SCHEDULE_TIMEOUT: c_long = c_long::MAX;
+/// Sleeps for the given timeout in [`Jiffies`], or until woken.
+///
+/// Returns the remaining time in [`Jiffies`], or zero if the timeout expired. The task state
+/// should be set before calling this.
+#[inline]
+pub fn schedule_timeout(timeout: Jiffies) -> Jiffies {
+ let timeout = timeout.try_into().unwrap_or(MAX_SCHEDULE_TIMEOUT);
+
+ // SAFETY: `schedule_timeout()` is always safe to call.
+ unsafe { bindings::schedule_timeout(timeout) as Jiffies }
+}
+
/// Bitmask for tasks that are sleeping in an interruptible state.
pub const TASK_INTERRUPTIBLE: c_int = bindings::TASK_INTERRUPTIBLE as c_int;
/// Bitmask for tasks that are sleeping in an uninterruptible state.
--
2.55.0