[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87ecv94ay9.fsf@kernel.org>
Date: Tue, 24 Jun 2025 13:48:30 +0200
From: Andreas Hindborg <a.hindborg@...nel.org>
To: "Stephen Rothwell" <sfr@...b.auug.org.au>
Cc: "Danilo Krummrich" <dakr@...nel.org>, "Alexandre Courbot"
<acourbot@...dia.com>, "FUJITA Tomonori" <fujita.tomonori@...il.com>,
"Linux Kernel Mailing List" <linux-kernel@...r.kernel.org>, "Linux Next
Mailing List" <linux-next@...r.kernel.org>
Subject: Re: linux-next: manual merge of the rust-timekeeping tree with the
drm-nova tree
"Stephen Rothwell" <sfr@...b.auug.org.au> writes:
> Hi all,
>
> After merging the rust-timekeeping tree, today's linux-next build
> (x86_64 allmodconfig) failed like this:
>
> error[E0599]: no method named `as_nanos` found for struct `Delta` in the current scope
> --> drivers/gpu/nova-core/util.rs:45:33
> |
> 45 | if start_time.elapsed().as_nanos() > timeout.as_nanos() as i64 {
> | ^^^^^^^^ method not found in `Delta`
>
> error: aborting due to 1 previous error
>
> For more information about this error, try `rustc --explain E0599`.
>
> Caused by commits
>
> 2ed94606a0fe ("rust: time: Rename Delta's methods from as_* to into_*")
> 768dfbfc98e2 ("rust: time: Make Instant generic over ClockSource")
>
> interacting with commit
>
> a03c9bd953c2 ("gpu: nova-core: add helper function to wait on condition")
>
> from the drm-nova tree.
>
> I tried to fix it up, but this lead down a rabbit hole and my rust
> skills are poor, so I just dropped the rust-timekeeping tree for today.
> A merge resolution would be appreciated.
I would suggest the following:
diff --git a/drivers/gpu/nova-core/util.rs b/drivers/gpu/nova-core/util.rs
index 5cafe0797cd6..24cbf3f4cc39 100644
--- a/drivers/gpu/nova-core/util.rs
+++ b/drivers/gpu/nova-core/util.rs
@@ -3,7 +3,7 @@
use core::time::Duration;
use kernel::prelude::*;
-use kernel::time::Instant;
+use kernel::time::{Instant, Monotonic};
pub(crate) const fn to_lowercase_bytes<const N: usize>(s: &str) -> [u8; N] {
let src = s.as_bytes();
@@ -35,14 +35,14 @@ pub(crate) const fn const_bytes_to_str(bytes: &[u8]) -> &str {
/// TODO[DLAY]: replace with `read_poll_timeout` once it is available.
/// (https://lore.kernel.org/lkml/20250220070611.214262-8-fujita.tomonori@gmail.com/)
pub(crate) fn wait_on<R, F: Fn() -> Option<R>>(timeout: Duration, cond: F) -> Result<R> {
- let start_time = Instant::now();
+ let start_time = Instant::<Monotonic>::now();
loop {
if let Some(ret) = cond() {
return Ok(ret);
}
- if start_time.elapsed().as_nanos() > timeout.as_nanos() as i64 {
+ if start_time.elapsed().into_nanos() > timeout.as_nanos() as i64 {
return Err(ETIMEDOUT);
}
}
For the Nova people: You might consider if it makes sense to take a
`kernel::time::Delta<C>` for the timeout.
Best regards,
Andreas Hindborg
Powered by blists - more mailing lists