[PATCH v5 00/14] hrtimer Rust API
From: Andreas Hindborg
Date: Tue Dec 17 2024 - 10:23:46 EST
This series adds support for using the `hrtimer` subsystem from Rust code.
This version adds support for timer mode and clock source configuration during
timer initialization. Examples and functionality to execute closures at timer
expiration has been removed, as these depend on either atomics [3] or
`SpinLockIrq` [4], which are still being worked on.
This series is a dependency for unmerged features of the Rust null block driver
[1], and for rkvms [2].
Link: https://git.kernel.org/pub/scm/linux/kernel/git/a.hindborg/linux.git/log/?h=rnull-v6.11-rc2 [1]
Link: https://gitlab.freedesktop.org/lyudess/linux/-/tree/rvkms-wip [2]
Link: https://lore.kernel.org/rust-for-linux/20240612223025.1158537-1-boqun.feng@xxxxxxxxx/ [3]
Link: https://lore.kernel.org/rust-for-linux/20240916213025.477225-1-lyude@xxxxxxxxxx/ [4]
Signed-off-by: Andreas Hindborg <a.hindborg@xxxxxxxxxx>
---
Changes in v5:
- Fix a typo in `impl_has_timer`
- Implement `Box::into_pin` in terms of `impl From<Box> for Pin<Box>`
- Link to v4: https://lore.kernel.org/r/20241206-hrtimer-v3-v6-12-rc2-v4-0-6cb8c3673682@xxxxxxxxxx
Changes in v4:
- rebase on v6.13-rc1 and adapt to kernel `Box`
- add a missing safety comment to `hrtimer::start`
- use `hrtimer_setup`
- fix a build issue when `bindings::hrtimer_restart` is signed
- fix a memory leak where box was not destroyed
- fix a documentation typo
- remove `as` coercion at multiple locations
- use fully qualified syntax when invoking `deref`
- move `hrtimer` into `time` module
- Link to v3: https://lore.kernel.org/r/20241017-hrtimer-v3-v6-12-rc2-v3-0-59a75cbb44da@xxxxxxxxxx
Changes in v3:
- support timer mode selection
- support clock source selection
- eliminate `Arc::clone_from_raw` in favor of using `ArcBorrow`
- make `Arc::as_ptr` an associated method
- update safety requirement for `ArcBorrow::from_raw`
- remove examples (pending `SpinLockIrq` and `CondVar` patches)
- remove `start_function` (v2 `schedule_function`, pending `SpinLockIrq` and `CondVar` patches)
- change function naming from schedule/armed to start/running
- add vocabulary to documentation
- update safety comment in `Arc::as_ptr`
- Link to v2: https://lore.kernel.org/r/20240917222739.1298275-1-a.hindborg@xxxxxxxxxx
Changes in v2:
- use a handle to own the timer callback target
- add ability to for callback to reschedule timer
- improve `impl_has_timer` to allow generics
- add support for stack allocated timers
- add support for scheduling closures
- use `Ktime` for setting expiration
- use `CondVar` instead of `AtomicBool` in examples
- rebase on 6.11
- improve documentation
- Link to v1: https://lore.kernel.org/r/20240425094634.262674-1-nmi@xxxxxxxxxxxx
---
Andreas Hindborg (13):
rust: hrtimer: introduce hrtimer support
rust: sync: add `Arc::as_ptr`
rust: hrtimer: implement `TimerPointer` for `Arc`
rust: hrtimer: allow timer restart from timer handler
rust: hrtimer: add `UnsafeTimerPointer`
rust: hrtimer: add `hrtimer::ScopedTimerPointer`
rust: hrtimer: implement `UnsafeTimerPointer` for `Pin<&T>`
rust: hrtimer: implement `UnsafeTimerPointer` for `Pin<&mut T>`
rust: alloc: add `Box::into_pin`
rust: hrtimer: implement `TimerPointer` for `Pin<Box<T>>`
rust: hrtimer: add `TimerMode`
rust: hrtimer: add clocksource selection through `ClockSource`
rust: hrtimer: add maintainer entry
Lyude Paul (1):
rust: time: Add Ktime::from_ns()
MAINTAINERS | 10 +
rust/kernel/alloc/kbox.rs | 6 +
rust/kernel/sync/arc.rs | 13 +-
rust/kernel/time.rs | 10 +
rust/kernel/time/hrtimer.rs | 532 ++++++++++++++++++++++++++++++++++++
rust/kernel/time/hrtimer/arc.rs | 87 ++++++
rust/kernel/time/hrtimer/pin.rs | 95 +++++++
rust/kernel/time/hrtimer/pin_mut.rs | 97 +++++++
rust/kernel/time/hrtimer/tbox.rs | 102 +++++++
9 files changed, 950 insertions(+), 2 deletions(-)
---
base-commit: 40384c840ea1944d7c5a392e8975ed088ecf0b37
change-id: 20241017-hrtimer-v3-v6-12-rc2-215dc6b169bf
Best regards,
--
Andreas Hindborg <a.hindborg@xxxxxxxxxx>