Subject: Re: linux-next: build failure after merge of the rust tree

From: Stephen Rothwell <[email-masked]>
Date: Wed, 19 Mar 2025 20:06:42 +1100

Hi Miguel,

On Wed, 19 Mar 2025 00:47:40 +0100 Miguel Ojeda <[email-masked]> wrote:
>
> On Tue, Mar 18, 2025 at 12:37 PM Stephen Rothwell <[email-masked]> wrote:
> >
> > When I merge the rust tree into linux-next, the complete resolution now
> > looks like this:
> > (the hunk in rust/kernel/sync.rs is needed due to a commit in the tip
> > tree)  
> 
> Thanks!
> 
> I have redone the 2 merges on my side again, following the ones you
> did (i.e. starting on the previous merge you had on 20250318, then
> rust-next, then hrtimer-next) and then compared. I saved it for you
> at:
> 
>     https://github.com/ojeda/linux.git rust-test-merge

Thanks for checking it out.

> There are a few differences, a couple important, another one not much
> -- all coming from the first merge (rust-next one).
> 
> 1) When merging rust-next, the first one is needed to pass `rustfmt`
> in `rust/kernel/sync.rs`:
> 
> -use pin_init;
>  use crate::prelude::*;
>  use crate::types::Opaque;
> +use pin_init;
> 
> Would it be possible for you to run `make ...... rustfmt` after
> merges? It is quite fast (with the amount of code we have :). As far
> as I know, Linus is also doing it, so it is not a huge deal, but it is
> nicer nevertheless to have it clean in linux-next so that CIs can do
> `make ....... rustfmtcheck` (which checks if it is clean).

I have a look into it.

> By the way, concerning this change, we could actually remove that
> line, but since it was in the original commit, I kept it in the merge
> -- we can clean it up in a proper commit later on.
> 
> 2) More importantly, there are a couple changed needed to keep the
> examples building (which are KUnit tests, i.e. under
> `CONFIG_RUST_KERNEL_DOCTESTS`). In `rust/kernel/sync.rs`:
> 
> -    /// # use kernel::{c_str, stack_pin_init};
> +    /// # use kernel::c_str;
>      /// # use kernel::alloc::KBox;
>      /// # use kernel::types::ForeignOwnable;
>      /// # use kernel::sync::{LockClassKey, SpinLock};
> +    /// # use pin_init::stack_pin_init;
> 
> And in `rust/kernel/sync/lock.rs`:
> 
> -    /// # use kernel::{new_spinlock, stack_pin_init,
> sync::lock::{Backend, Guard, Lock}};
> +    /// # use kernel::{new_spinlock, sync::lock::{Backend, Guard, Lock}};
> +    /// # use pin_init::stack_pin_init;
> 
> 3) A trivial difference is that I kept the removal of this newline in
> `rust/pin-init/src/lib.rs`, because the original fix did so (which was
> likely done because the "SAFETY" comment is supposed to "cover" it
> too), but it is not a big deal to keep it as you have it.
> 
>      Option<NonZeroI128>, Option<NonZeroIsize>,
> -
>      {<T>} Option<NonNull<T>>,
> 
> Would it be possible to fix at least 1) and 2)? Thanks a lot!

I added all three to my resolution today.

-- 
Cheers,
Stephen Rothwell