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

Stephen Rothwell
2025-03-19T09:07:00Z

[-- Attachment #1: Type: text/plain, Size: 2880 bytes --]

Hi Miguel,

On Wed, 19 Mar 2025 00:47:40 +0100 Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> wrote:
>
> On Tue, Mar 18, 2025 at 12:37 PM Stephen Rothwell <sfr@canb.auug.org.au> 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

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]