Thread (63 messages) 63 messages, 5 authors, 2025-01-24

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help