Message ID | 20241005122531.20298-4-fujita.tomonori@gmail.com (mailing list archive) |
---|---|
State | New |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | rust: Add IO polling | expand |
On Sat, Oct 05, 2024 at 09:25:28PM +0900, FUJITA Tomonori wrote: > Implement Add<Delta> for Ktime to support the operation: > > Ktime = Ktime + Delta > > This is used to calculate the future time when the timeout will occur. Since Delta can be negative, it could also be a passed time. For a timeout, that does not make much sense. > +impl core::ops::Add<Delta> for Ktime { > + type Output = Ktime; > + > + #[inline] > + fn add(self, delta: Delta) -> Ktime { > + // SAFETY: FFI call. > + let t = unsafe { bindings::ktime_add_ns(self.inner, delta.as_nanos() as u64) }; So you are throwing away the sign bit. What does Rust in the kernel do if it was a negative delta? I think the types being used here need more consideration. Andrew
diff --git a/rust/helpers/time.c b/rust/helpers/time.c index d6f61affb2c3..60dee69f4efc 100644 --- a/rust/helpers/time.c +++ b/rust/helpers/time.c @@ -2,6 +2,11 @@ #include <linux/ktime.h> +ktime_t rust_helper_ktime_add_ns(const ktime_t kt, const u64 nsec) +{ + return ktime_add_ns(kt, nsec); +} + int rust_helper_ktime_compare(const ktime_t cmp1, const ktime_t cmp2) { return ktime_compare(cmp1, cmp2); diff --git a/rust/kernel/time.rs b/rust/kernel/time.rs index 6c5a1c50c5f1..3e00ad22ed89 100644 --- a/rust/kernel/time.rs +++ b/rust/kernel/time.rs @@ -167,3 +167,14 @@ pub fn as_micros(self) -> i64 { self.nanos / NSEC_PER_USEC } } + +impl core::ops::Add<Delta> for Ktime { + type Output = Ktime; + + #[inline] + fn add(self, delta: Delta) -> Ktime { + // SAFETY: FFI call. + let t = unsafe { bindings::ktime_add_ns(self.inner, delta.as_nanos() as u64) }; + Ktime::from_raw(t) + } +}
Implement Add<Delta> for Ktime to support the operation: Ktime = Ktime + Delta This is used to calculate the future time when the timeout will occur. Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com> --- rust/helpers/time.c | 5 +++++ rust/kernel/time.rs | 11 +++++++++++ 2 files changed, 16 insertions(+)