Re: [PATCH v8 4/7] rust: time: Add wrapper for fsleep function
From: Alice Ryhl <aliceryhl@google.com>
Date: 2025-01-22 17:07:11
Also in:
lkml, rust-for-linux
On Wed, Jan 22, 2025 at 6:05 PM Gary Guo [off-list ref] wrote:
On Sat, 18 Jan 2025 17:02:24 +0900 (JST) FUJITA Tomonori [off-list ref] wrote:quoted
On Fri, 17 Jan 2025 19:59:15 +0100 Miguel Ojeda [off-list ref] wrote:quoted
On Thu, Jan 16, 2025 at 5:42 AM FUJITA Tomonori [off-list ref] wrote:quoted
+/// `delta` must be 0 or greater and no more than `u32::MAX / 2` microseconds. +/// If a value outside the range is given, the function will sleep +/// for `u32::MAX / 2` microseconds (= ~2147 seconds or ~36 minutes) at least.I would emphasize with something like: `delta` must be within [0, `u32::MAX / 2`] microseconds; otherwise, it is erroneous behavior. That is, it is considered a bug to call this function with an out-of-range value, in which case the function will sleep for at least the maximum value in the range and may warn in the future.Thanks, I'll use the above instead.quoted
In addition, I would add a new paragraph how the behavior differs w.r.t. the C `fsleep()`, i.e. IIRC from the past discussions, `fsleep()` would do an infinite sleep instead. So I think it is important to highlight that./// The above behavior differs from the kernel's [`fsleep`], which could sleep /// infinitely (for [`MAX_JIFFY_OFFSET`] jiffies). Looks ok?quoted
quoted
+ // The argument of fsleep is an unsigned long, 32-bit on 32-bit architectures. + // Considering that fsleep rounds up the duration to the nearest millisecond, + // set the maximum value to u32::MAX / 2 microseconds.Nit: please use Markdown code spans in normal comments (no need for intra-doc links there).Understood.quoted
quoted
+ let duration = if delta > MAX_DURATION || delta.is_negative() { + // TODO: add WARN_ONCE() when it's supported.Ditto (also "Add").Oops, I'll fix.quoted
By the way, can this be written differently maybe? e.g. using a range since it is `const`?A range can be used for a custom type?Yes, you can say `!(Delta::ZERO..MAX_DURATION).contains(&delta)`. (You'll need to add `Delta::ZERO`).
It would need to use ..= instead of .. to match the current check. Alice