All of lore.kernel.org
 help / color / mirror / Atom feed
From: Miguel Ojeda <ojeda@kernel.org>
To: Miguel Ojeda <ojeda@kernel.org>
Cc: "Boqun Feng" <boqun@kernel.org>, "Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Benno Lossin" <lossin@kernel.org>,
	"Andreas Hindborg" <a.hindborg@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Trevor Gross" <tmgross@umich.edu>,
	"Danilo Krummrich" <dakr@kernel.org>,
	"Daniel Almeida" <daniel.almeida@collabora.com>,
	"Tamir Duberstein" <tamird@kernel.org>,
	"Alexandre Courbot" <acourbot@nvidia.com>,
	"Onur Özkan" <work@onurozkan.dev>,
	rust-for-linux@vger.kernel.org,
	"Joshua Liebow-Feeser" <joshlf@google.com>,
	"Jack Wrenn" <jswrenn@google.com>
Subject: [PATCH] rust: zerocopy: update to v0.8.54
Date: Thu,  9 Jul 2026 23:13:11 +0200	[thread overview]
Message-ID: <20260709211311.142544-1-ojeda@kernel.org> (raw)

Update our vendored copy of `zerocopy` (and `zerocopy-derive`) to v0.8.54.

It is a very small delta from v0.8.52, and most importantly it resolves
the unexpected lack of inlining [1] which triggered a modpost error
under `CONFIG_CC_OPTIMIZE_FOR_SIZE=y` reported by Alexandre using Gary's
suggestion [2]:

    ERROR: modpost: "_RNvMNtCs5wX7wwEUCR9_8zerocopy6layoutNtB2_8SizeInfo24try_to_nonzero_elem_size" [drivers/gpu/nova-core.ko] undefined!
    ERROR: modpost: "_RNvNtCs5wX7wwEUCR9_8zerocopy4util18padding_needed_for" [drivers/gpu/nova-core.ko] undefined!

It also resolves `most_traits` being unexpectedly documented [3] that I
reported and adds a missing SPDX license identifier [4] that I requested
to match the kernel version.

The following script may be used to check for the remaining differences:

    for path in $(cd rust/zerocopy-derive/ && find . -type f ! -name README.md); do
        curl --silent --show-error --location \
            https://github.com/google/zerocopy/raw/v0.8.54/zerocopy/zerocopy-derive/src/$path |
            git diff --no-index - rust/zerocopy-derive/$path &&
            echo $path: OK
    done

    for path in $(cd rust/zerocopy/ && find . -type f ! -name README.md); do
        curl --silent --show-error --location \
            https://github.com/google/zerocopy/raw/v0.8.54/zerocopy/$path |
            git diff --no-index - rust/zerocopy/$path &&
            echo $path: OK
    done

Cc: Joshua Liebow-Feeser <joshlf@google.com>
Cc: Jack Wrenn <jswrenn@google.com>
Reported-by: Alexandre Courbot <acourbot@nvidia.com>
Link: https://lore.kernel.org/rust-for-linux/20260708-zerocopy-export-v1-1-2bfc355853c6@nvidia.com/ [1]
Suggested-by: Gary Guo <gary@garyguo.net>
Link: https://lore.kernel.org/rust-for-linux/DJT6235B3DOV.222XR5O6VHG4M@garyguo.net/ [2]
Link: https://github.com/google/zerocopy/issues/3466 [3]
Link: https://github.com/google/zerocopy/issues/3457 [4]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
---
This goes on top of the v0.8.52 one:

  https://lore.kernel.org/rust-for-linux/20260625231919.692444-1-ojeda@kernel.org/

I may land both in `rust-fixes`, especially if someone else can confirm
it works for them (I reproduced Alexandre's issue and this does indeed
solve it).

 rust/Makefile                   |  2 +-
 rust/zerocopy-derive/README.md  | 12 ++++++------
 rust/zerocopy-derive/lib.rs     |  2 +-
 rust/zerocopy/README.md         | 12 ++++++------
 rust/zerocopy/rustdoc/style.css |  1 -
 rust/zerocopy/src/byteorder.rs  |  1 +
 rust/zerocopy/src/layout.rs     |  2 ++
 rust/zerocopy/src/lib.rs        |  1 -
 rust/zerocopy/src/util/mod.rs   |  6 ++++++
 9 files changed, 23 insertions(+), 16 deletions(-)

diff --git a/rust/Makefile b/rust/Makefile
index 835cf10e1c0b..627ed79dc6f5 100644
--- a/rust/Makefile
+++ b/rust/Makefile
@@ -92,7 +92,7 @@ zerocopy-flags := \
     $(call cfgs-to-flags,$(zerocopy-cfgs))

 zerocopy-envs := \
-    CARGO_PKG_VERSION=0.8.52
+    CARGO_PKG_VERSION=0.8.54

 proc_macro2-cfgs := \
     feature="proc-macro" \
diff --git a/rust/zerocopy-derive/README.md b/rust/zerocopy-derive/README.md
index 2a3dcf1212af..d62c79804342 100644
--- a/rust/zerocopy-derive/README.md
+++ b/rust/zerocopy-derive/README.md
@@ -1,14 +1,14 @@
 # `zerocopy-derive`

-These source files come from the Rust `zerocopy-derive` crate, version v0.8.52
-(released 2026-06-09), hosted in the <https://github.com/google/zerocopy>
+These source files come from the Rust `zerocopy-derive` crate, version v0.8.54
+(released 2026-07-08), hosted in the <https://github.com/google/zerocopy>
 repository, licensed under "BSD-2-Clause OR Apache-2.0 OR MIT" and only
 modified to tweak the SPDX license identifiers and to remove the generation of
 non-ASCII identifiers.

 For copyright details, please see:

-    https://github.com/google/zerocopy/blob/v0.8.52/README.md?plain=1
-    https://github.com/google/zerocopy/blob/v0.8.52/LICENSE-BSD
-    https://github.com/google/zerocopy/blob/v0.8.52/LICENSE-APACHE
-    https://github.com/google/zerocopy/blob/v0.8.52/LICENSE-MIT
+    https://github.com/google/zerocopy/blob/v0.8.54/README.md?plain=1
+    https://github.com/google/zerocopy/blob/v0.8.54/LICENSE-BSD
+    https://github.com/google/zerocopy/blob/v0.8.54/LICENSE-APACHE
+    https://github.com/google/zerocopy/blob/v0.8.54/LICENSE-MIT
diff --git a/rust/zerocopy-derive/lib.rs b/rust/zerocopy-derive/lib.rs
index 88599e750894..d387de368367 100644
--- a/rust/zerocopy-derive/lib.rs
+++ b/rust/zerocopy-derive/lib.rs
@@ -129,7 +129,7 @@ fn into_ts(self) -> proc_macro2::TokenStream {
 derive!(ByteEq => derive_eq => crate::derive::derive_eq);
 derive!(SplitAt => derive_split_at => crate::derive::derive_split_at);

-#[cfg_attr(zerocopy_unstable_linux, doc(hidden))]
+#[cfg_attr(not(zerocopy_unstable_linux), doc(hidden))]
 #[proc_macro_derive(most_traits, attributes(zerocopy))]
 pub fn most_traits(ts: proc_macro::TokenStream) -> proc_macro::TokenStream {
     let ast = syn::parse_macro_input!(ts as DeriveInput);
diff --git a/rust/zerocopy/README.md b/rust/zerocopy/README.md
index 712b0317df25..3d11a6502cf0 100644
--- a/rust/zerocopy/README.md
+++ b/rust/zerocopy/README.md
@@ -1,13 +1,13 @@
 # `zerocopy`

-These source files come from the Rust `zerocopy` crate, version v0.8.52
-(released 2026-06-09), hosted in the <https://github.com/google/zerocopy>
+These source files come from the Rust `zerocopy` crate, version v0.8.54
+(released 2026-07-08), hosted in the <https://github.com/google/zerocopy>
 repository, licensed under "BSD-2-Clause OR Apache-2.0 OR MIT" and only
 modified to tweak the SPDX license identifiers.

 For copyright details, please see:

-    https://github.com/google/zerocopy/blob/v0.8.52/README.md?plain=1
-    https://github.com/google/zerocopy/blob/v0.8.52/LICENSE-BSD
-    https://github.com/google/zerocopy/blob/v0.8.52/LICENSE-APACHE
-    https://github.com/google/zerocopy/blob/v0.8.52/LICENSE-MIT
+    https://github.com/google/zerocopy/blob/v0.8.54/README.md?plain=1
+    https://github.com/google/zerocopy/blob/v0.8.54/LICENSE-BSD
+    https://github.com/google/zerocopy/blob/v0.8.54/LICENSE-APACHE
+    https://github.com/google/zerocopy/blob/v0.8.54/LICENSE-MIT
diff --git a/rust/zerocopy/rustdoc/style.css b/rust/zerocopy/rustdoc/style.css
index 414348964af2..d2d55ad2e689 100644
--- a/rust/zerocopy/rustdoc/style.css
+++ b/rust/zerocopy/rustdoc/style.css
@@ -1,5 +1,4 @@
 /* SPDX-License-Identifier: (BSD-2-Clause OR Apache-2.0) OR MIT */
-
 /*
 Copyright 2026 The Fuchsia Authors

diff --git a/rust/zerocopy/src/byteorder.rs b/rust/zerocopy/src/byteorder.rs
index ecf95e38eebd..c761d5728320 100644
--- a/rust/zerocopy/src/byteorder.rs
+++ b/rust/zerocopy/src/byteorder.rs
@@ -100,6 +100,7 @@ impl Sealed for super::LittleEndian {}

 #[allow(missing_copy_implementations, missing_debug_implementations)]
 #[doc(hidden)]
+#[derive(PartialEq)]
 pub enum Order {
     BigEndian,
     LittleEndian,
diff --git a/rust/zerocopy/src/layout.rs b/rust/zerocopy/src/layout.rs
index 942d35db8957..b1fa0cd436db 100644
--- a/rust/zerocopy/src/layout.rs
+++ b/rust/zerocopy/src/layout.rs
@@ -71,6 +71,8 @@ impl SizeInfo {
     /// Attempts to create a `SizeInfo` from `Self` in which `elem_size` is a
     /// `NonZeroUsize`. If `elem_size` is 0, returns `None`.
     #[allow(unused)]
+    #[cfg_attr(not(zerocopy_inline_always), inline)]
+    #[cfg_attr(zerocopy_inline_always, inline(always))]
     const fn try_to_nonzero_elem_size(&self) -> Option<SizeInfo<NonZeroUsize>> {
         Some(match *self {
             SizeInfo::Sized { size } => SizeInfo::Sized { size },
diff --git a/rust/zerocopy/src/lib.rs b/rust/zerocopy/src/lib.rs
index 700fece1b728..572f0563fe2f 100644
--- a/rust/zerocopy/src/lib.rs
+++ b/rust/zerocopy/src/lib.rs
@@ -435,7 +435,6 @@
     WARNING
 };

-#[doc(hidden)]
 #[cfg(all(any(feature = "derive", test), zerocopy_unstable_linux))]
 pub use zerocopy_derive::most_traits;
 /// Implements [`KnownLayout`].
diff --git a/rust/zerocopy/src/util/mod.rs b/rust/zerocopy/src/util/mod.rs
index f8affbbd336c..02fd4ed62741 100644
--- a/rust/zerocopy/src/util/mod.rs
+++ b/rust/zerocopy/src/util/mod.rs
@@ -150,6 +150,8 @@ pub(crate) fn validate_aligned_to<T: AsAddress, U>(t: T) -> Result<(), Alignment
     // Ensures that we add the minimum required padding.
     kani::ensures(|&p| p < align.get()),
 )]
+#[cfg_attr(not(zerocopy_inline_always), inline)]
+#[cfg_attr(zerocopy_inline_always, inline(always))]
 pub(crate) const fn padding_needed_for(len: usize, align: NonZeroUsize) -> usize {
     #[cfg(kani)]
     #[kani::proof_for_contract(padding_needed_for)]
@@ -251,6 +253,8 @@ fn proof() {
     n & mask
 }

+#[cfg_attr(not(zerocopy_inline_always), inline)]
+#[cfg_attr(zerocopy_inline_always, inline(always))]
 pub(crate) const fn max(a: NonZeroUsize, b: NonZeroUsize) -> NonZeroUsize {
     if a.get() < b.get() {
         b
@@ -259,6 +263,8 @@ pub(crate) const fn max(a: NonZeroUsize, b: NonZeroUsize) -> NonZeroUsize {
     }
 }

+#[cfg_attr(not(zerocopy_inline_always), inline)]
+#[cfg_attr(zerocopy_inline_always, inline(always))]
 pub(crate) const fn min(a: NonZeroUsize, b: NonZeroUsize) -> NonZeroUsize {
     if a.get() > b.get() {
         b
--
2.55.0

             reply	other threads:[~2026-07-09 21:13 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-09 21:13 Miguel Ojeda [this message]
2026-07-09 21:58 ` [PATCH] rust: zerocopy: update to v0.8.54 Gary Guo
2026-07-10  6:10 ` Alexandre Courbot
2026-07-10  7:49 ` Alice Ryhl
2026-07-10 16:46 ` Miguel Ojeda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260709211311.142544-1-ojeda@kernel.org \
    --to=ojeda@kernel.org \
    --cc=a.hindborg@kernel.org \
    --cc=acourbot@nvidia.com \
    --cc=aliceryhl@google.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun@kernel.org \
    --cc=dakr@kernel.org \
    --cc=daniel.almeida@collabora.com \
    --cc=gary@garyguo.net \
    --cc=joshlf@google.com \
    --cc=jswrenn@google.com \
    --cc=lossin@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=tamird@kernel.org \
    --cc=tmgross@umich.edu \
    --cc=work@onurozkan.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.