Messages in this thread | | | From | Eric Curtin <> | Date | Tue, 21 Feb 2023 07:25:35 +0000 | Subject | Re: [PATCH] rust: time: New module for timekeeping functions |
| |
On Tue, 21 Feb 2023 at 07:16, Asahi Lina <lina@asahilina.net> wrote: > > This module is intended to contain functions related to kernel > timekeeping and time. Initially, this just wraps ktime_get() and > ktime_get_boottime() and returns them as core::time::Duration instances. > This is useful for drivers that need to implement simple retry loops and > timeouts. > > Signed-off-by: Asahi Lina <lina@asahilina.net> > ---
Nice and simple C interface to create Rust abstractions for.
Reviewed-by: Eric Curtin <ecurtin@redhat.com>
Is mise le meas/Regards,
Eric Curtin
> rust/bindings/bindings_helper.h | 4 +++- > rust/kernel/lib.rs | 1 + > rust/kernel/time.rs | 25 +++++++++++++++++++++++++ > 3 files changed, 29 insertions(+), 1 deletion(-) > > diff --git a/rust/bindings/bindings_helper.h b/rust/bindings/bindings_helper.h > index 75d85bd6c592..587f3d1c0c9f 100644 > --- a/rust/bindings/bindings_helper.h > +++ b/rust/bindings/bindings_helper.h > @@ -6,8 +6,10 @@ > * Sorted alphabetically. > */ > > -#include <linux/slab.h> > +#include <linux/ktime.h> > #include <linux/refcount.h> > +#include <linux/slab.h> > +#include <linux/timekeeping.h> > > /* `bindgen` gets confused at certain things. */ > const gfp_t BINDINGS_GFP_KERNEL = GFP_KERNEL; > diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs > index 223564f9f0cc..371b1b17570e 100644 > --- a/rust/kernel/lib.rs > +++ b/rust/kernel/lib.rs > @@ -37,6 +37,7 @@ mod static_assert; > pub mod std_vendor; > pub mod str; > pub mod sync; > +pub mod time; > pub mod types; > > #[doc(hidden)] > diff --git a/rust/kernel/time.rs b/rust/kernel/time.rs > new file mode 100644 > index 000000000000..02844db47d34 > --- /dev/null > +++ b/rust/kernel/time.rs > @@ -0,0 +1,25 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +//! Timekeeping functions. > +//! > +//! C header: [`include/linux/ktime.h`](../../../../include/linux/ktime.h) > +//! C header: [`include/linux/timekeeping.h`](../../../../include/linux/timekeeping.h) > + > +use crate::bindings; > +use core::time::Duration; > + > +/// Returns the kernel time elapsed since boot, excluding time spent sleeping, as a [`Duration`]. > +pub fn ktime_get() -> Duration { > + // SAFETY: Function has no side effects and no inputs. > + Duration::from_nanos(unsafe { bindings::ktime_get() }.try_into().unwrap()) > +} > + > +/// Returns the kernel time elapsed since boot, including time spent sleeping, as a [`Duration`]. > +pub fn ktime_get_boottime() -> Duration { > + Duration::from_nanos( > + // SAFETY: Function has no side effects and no variable inputs. > + unsafe { bindings::ktime_get_with_offset(bindings::tk_offsets_TK_OFFS_BOOT) } > + .try_into() > + .unwrap(), > + ) > +} > > --- > base-commit: 89f5349e0673322857bd432fa23113af56673739 > change-id: 20230221-gpu-up-time-ea9412204c3b > > Thank you, > ~~ Lina > >
| |