Commit 6c5b3e30 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'rust-fixes-6.11-2' of https://github.com/Rust-for-Linux/linux

Pull Rust fixes from Miguel Ojeda:
 "Toolchain and infrastructure:

   - Fix builds for nightly compiler users now that 'new_uninit' was
     split into new features by using an alternative approach for the
     code that used what is now called the 'box_uninit_write' feature

   - Allow the 'stable_features' lint to preempt upcoming warnings about
     them, since soon there will be unstable features that will become
     stable in nightly compilers

   - Export bss symbols too

  'kernel' crate:

   - 'block' module: fix wrong usage of lockdep API

  'macros' crate:

   - Provide correct provenance when constructing 'THIS_MODULE'

  Documentation:

   - Remove unintended indentation (blockquotes) in generated output

   - Fix a couple typos

  MAINTAINERS:

   - Remove Wedson as Rust maintainer

   - Update Andreas' email"

* tag 'rust-fixes-6.11-2' of https://github.com/Rust-for-Linux/linux:
  MAINTAINERS: update Andreas Hindborg's email address
  MAINTAINERS: Remove Wedson as Rust maintainer
  rust: macros: provide correct provenance when constructing THIS_MODULE
  rust: allow `stable_features` lint
  docs: rust: remove unintended blockquote in Quick Start
  rust: alloc: eschew `Box<MaybeUninit<T>>::write`
  rust: kernel: fix typos in code comments
  docs: rust: remove unintended blockquote in Coding Guidelines
  rust: block: fix wrong usage of lockdep API
  rust: kbuild: fix export of bss symbols
parents e4b42053 cff56ff7
...@@ -60,6 +60,7 @@ Amit Nischal <quic_anischal@quicinc.com> <anischal@codeaurora.org> ...@@ -60,6 +60,7 @@ Amit Nischal <quic_anischal@quicinc.com> <anischal@codeaurora.org>
Andi Kleen <ak@linux.intel.com> <ak@suse.de> Andi Kleen <ak@linux.intel.com> <ak@suse.de>
Andi Shyti <andi@etezian.org> <andi.shyti@samsung.com> Andi Shyti <andi@etezian.org> <andi.shyti@samsung.com>
Andreas Herrmann <aherrman@de.ibm.com> Andreas Herrmann <aherrman@de.ibm.com>
Andreas Hindborg <a.hindborg@kernel.org> <a.hindborg@samsung.com>
Andrej Shadura <andrew.shadura@collabora.co.uk> Andrej Shadura <andrew.shadura@collabora.co.uk>
Andrej Shadura <andrew@shadura.me> <andrew@beldisplaytech.com> Andrej Shadura <andrew@shadura.me> <andrew@beldisplaytech.com>
Andrew Morton <akpm@linux-foundation.org> Andrew Morton <akpm@linux-foundation.org>
......
...@@ -145,32 +145,32 @@ This is how a well-documented Rust function may look like: ...@@ -145,32 +145,32 @@ This is how a well-documented Rust function may look like:
This example showcases a few ``rustdoc`` features and some conventions followed This example showcases a few ``rustdoc`` features and some conventions followed
in the kernel: in the kernel:
- The first paragraph must be a single sentence briefly describing what - The first paragraph must be a single sentence briefly describing what
the documented item does. Further explanations must go in extra paragraphs. the documented item does. Further explanations must go in extra paragraphs.
- Unsafe functions must document their safety preconditions under - Unsafe functions must document their safety preconditions under
a ``# Safety`` section. a ``# Safety`` section.
- While not shown here, if a function may panic, the conditions under which - While not shown here, if a function may panic, the conditions under which
that happens must be described under a ``# Panics`` section. that happens must be described under a ``# Panics`` section.
Please note that panicking should be very rare and used only with a good Please note that panicking should be very rare and used only with a good
reason. In almost all cases, a fallible approach should be used, typically reason. In almost all cases, a fallible approach should be used, typically
returning a ``Result``. returning a ``Result``.
- If providing examples of usage would help readers, they must be written in - If providing examples of usage would help readers, they must be written in
a section called ``# Examples``. a section called ``# Examples``.
- Rust items (functions, types, constants...) must be linked appropriately - Rust items (functions, types, constants...) must be linked appropriately
(``rustdoc`` will create a link automatically). (``rustdoc`` will create a link automatically).
- Any ``unsafe`` block must be preceded by a ``// SAFETY:`` comment - Any ``unsafe`` block must be preceded by a ``// SAFETY:`` comment
describing why the code inside is sound. describing why the code inside is sound.
While sometimes the reason might look trivial and therefore unneeded, While sometimes the reason might look trivial and therefore unneeded,
writing these comments is not just a good way of documenting what has been writing these comments is not just a good way of documenting what has been
taken into account, but most importantly, it provides a way to know that taken into account, but most importantly, it provides a way to know that
there are no *extra* implicit constraints. there are no *extra* implicit constraints.
To learn more about how to write documentation for Rust and extra features, To learn more about how to write documentation for Rust and extra features,
please take a look at the ``rustdoc`` book at: please take a look at the ``rustdoc`` book at:
......
...@@ -305,7 +305,7 @@ If GDB/Binutils is used and Rust symbols are not getting demangled, the reason ...@@ -305,7 +305,7 @@ If GDB/Binutils is used and Rust symbols are not getting demangled, the reason
is the toolchain does not support Rust's new v0 mangling scheme yet. is the toolchain does not support Rust's new v0 mangling scheme yet.
There are a few ways out: There are a few ways out:
- Install a newer release (GDB >= 10.2, Binutils >= 2.36). - Install a newer release (GDB >= 10.2, Binutils >= 2.36).
- Some versions of GDB (e.g. vanilla GDB 10.1) are able to use - Some versions of GDB (e.g. vanilla GDB 10.1) are able to use
the pre-demangled names embedded in the debug info (``CONFIG_DEBUG_INFO``). the pre-demangled names embedded in the debug info (``CONFIG_DEBUG_INFO``).
...@@ -3868,7 +3868,7 @@ F: kernel/trace/blktrace.c ...@@ -3868,7 +3868,7 @@ F: kernel/trace/blktrace.c
F: lib/sbitmap.c F: lib/sbitmap.c
BLOCK LAYER DEVICE DRIVER API [RUST] BLOCK LAYER DEVICE DRIVER API [RUST]
M: Andreas Hindborg <a.hindborg@samsung.com> M: Andreas Hindborg <a.hindborg@kernel.org>
R: Boqun Feng <boqun.feng@gmail.com> R: Boqun Feng <boqun.feng@gmail.com>
L: linux-block@vger.kernel.org L: linux-block@vger.kernel.org
L: rust-for-linux@vger.kernel.org L: rust-for-linux@vger.kernel.org
...@@ -19932,12 +19932,11 @@ F: tools/verification/ ...@@ -19932,12 +19932,11 @@ F: tools/verification/
RUST RUST
M: Miguel Ojeda <ojeda@kernel.org> M: Miguel Ojeda <ojeda@kernel.org>
M: Alex Gaynor <alex.gaynor@gmail.com> M: Alex Gaynor <alex.gaynor@gmail.com>
M: Wedson Almeida Filho <wedsonaf@gmail.com>
R: Boqun Feng <boqun.feng@gmail.com> R: Boqun Feng <boqun.feng@gmail.com>
R: Gary Guo <gary@garyguo.net> R: Gary Guo <gary@garyguo.net>
R: Björn Roy Baron <bjorn3_gh@protonmail.com> R: Björn Roy Baron <bjorn3_gh@protonmail.com>
R: Benno Lossin <benno.lossin@proton.me> R: Benno Lossin <benno.lossin@proton.me>
R: Andreas Hindborg <a.hindborg@samsung.com> R: Andreas Hindborg <a.hindborg@kernel.org>
R: Alice Ryhl <aliceryhl@google.com> R: Alice Ryhl <aliceryhl@google.com>
L: rust-for-linux@vger.kernel.org L: rust-for-linux@vger.kernel.org
S: Supported S: Supported
......
...@@ -445,6 +445,7 @@ KBUILD_USERLDFLAGS := $(USERLDFLAGS) ...@@ -445,6 +445,7 @@ KBUILD_USERLDFLAGS := $(USERLDFLAGS)
# host programs. # host programs.
export rust_common_flags := --edition=2021 \ export rust_common_flags := --edition=2021 \
-Zbinary_dep_depinfo=y \ -Zbinary_dep_depinfo=y \
-Astable_features \
-Dunsafe_op_in_unsafe_fn \ -Dunsafe_op_in_unsafe_fn \
-Dnon_ascii_idents \ -Dnon_ascii_idents \
-Wrust_2018_idioms \ -Wrust_2018_idioms \
......
...@@ -305,7 +305,7 @@ $(obj)/bindings/bindings_helpers_generated.rs: $(src)/helpers.c FORCE ...@@ -305,7 +305,7 @@ $(obj)/bindings/bindings_helpers_generated.rs: $(src)/helpers.c FORCE
quiet_cmd_exports = EXPORTS $@ quiet_cmd_exports = EXPORTS $@
cmd_exports = \ cmd_exports = \
$(NM) -p --defined-only $< \ $(NM) -p --defined-only $< \
| awk '/ (T|R|D) / {printf "EXPORT_SYMBOL_RUST_GPL(%s);\n",$$3}' > $@ | awk '/ (T|R|D|B) / {printf "EXPORT_SYMBOL_RUST_GPL(%s);\n",$$3}' > $@
$(obj)/exports_core_generated.h: $(obj)/core.o FORCE $(obj)/exports_core_generated.h: $(obj)/core.o FORCE
$(call if_changed,exports) $(call if_changed,exports)
......
...@@ -21,8 +21,10 @@ pub trait BoxExt<T>: Sized { ...@@ -21,8 +21,10 @@ pub trait BoxExt<T>: Sized {
impl<T> BoxExt<T> for Box<T> { impl<T> BoxExt<T> for Box<T> {
fn new(x: T, flags: Flags) -> Result<Self, AllocError> { fn new(x: T, flags: Flags) -> Result<Self, AllocError> {
let b = <Self as BoxExt<_>>::new_uninit(flags)?; let mut b = <Self as BoxExt<_>>::new_uninit(flags)?;
Ok(Box::write(b, x)) b.write(x);
// SAFETY: We just wrote to it.
Ok(unsafe { b.assume_init() })
} }
#[cfg(any(test, testlib))] #[cfg(any(test, testlib))]
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
//! C header: [`include/linux/blk_mq.h`](srctree/include/linux/blk_mq.h) //! C header: [`include/linux/blk_mq.h`](srctree/include/linux/blk_mq.h)
use crate::block::mq::{raw_writer::RawWriter, Operations, TagSet}; use crate::block::mq::{raw_writer::RawWriter, Operations, TagSet};
use crate::error;
use crate::{bindings, error::from_err_ptr, error::Result, sync::Arc}; use crate::{bindings, error::from_err_ptr, error::Result, sync::Arc};
use crate::{error, static_lock_class};
use core::fmt::{self, Write}; use core::fmt::{self, Write};
/// A builder for [`GenDisk`]. /// A builder for [`GenDisk`].
...@@ -93,8 +93,6 @@ pub fn build<T: Operations>( ...@@ -93,8 +93,6 @@ pub fn build<T: Operations>(
name: fmt::Arguments<'_>, name: fmt::Arguments<'_>,
tagset: Arc<TagSet<T>>, tagset: Arc<TagSet<T>>,
) -> Result<GenDisk<T>> { ) -> Result<GenDisk<T>> {
let lock_class_key = crate::sync::LockClassKey::new();
// SAFETY: `bindings::queue_limits` contain only fields that are valid when zeroed. // SAFETY: `bindings::queue_limits` contain only fields that are valid when zeroed.
let mut lim: bindings::queue_limits = unsafe { core::mem::zeroed() }; let mut lim: bindings::queue_limits = unsafe { core::mem::zeroed() };
...@@ -110,7 +108,7 @@ pub fn build<T: Operations>( ...@@ -110,7 +108,7 @@ pub fn build<T: Operations>(
tagset.raw_tag_set(), tagset.raw_tag_set(),
&mut lim, &mut lim,
core::ptr::null_mut(), core::ptr::null_mut(),
lock_class_key.as_ptr(), static_lock_class!().as_ptr(),
) )
})?; })?;
......
...@@ -145,7 +145,7 @@ ...@@ -145,7 +145,7 @@
//! } //! }
//! } //! }
//! // Implement the internal `PinData` trait that marks the pin-data struct as a pin-data //! // Implement the internal `PinData` trait that marks the pin-data struct as a pin-data
//! // struct. This is important to ensure that no user can implement a rouge `__pin_data` //! // struct. This is important to ensure that no user can implement a rogue `__pin_data`
//! // function without using `unsafe`. //! // function without using `unsafe`.
//! unsafe impl<T> ::kernel::init::__internal::PinData for __ThePinData<T> { //! unsafe impl<T> ::kernel::init::__internal::PinData for __ThePinData<T> {
//! type Datee = Bar<T>; //! type Datee = Bar<T>;
...@@ -156,7 +156,7 @@ ...@@ -156,7 +156,7 @@
//! // case no such fields exist, hence this is almost empty. The two phantomdata fields exist //! // case no such fields exist, hence this is almost empty. The two phantomdata fields exist
//! // for two reasons: //! // for two reasons:
//! // - `__phantom`: every generic must be used, since we cannot really know which generics //! // - `__phantom`: every generic must be used, since we cannot really know which generics
//! // are used, we declere all and then use everything here once. //! // are used, we declare all and then use everything here once.
//! // - `__phantom_pin`: uses the `'__pin` lifetime and ensures that this struct is invariant //! // - `__phantom_pin`: uses the `'__pin` lifetime and ensures that this struct is invariant
//! // over it. The lifetime is needed to work around the limitation that trait bounds must //! // over it. The lifetime is needed to work around the limitation that trait bounds must
//! // not be trivial, e.g. the user has a `#[pin] PhantomPinned` field -- this is //! // not be trivial, e.g. the user has a `#[pin] PhantomPinned` field -- this is
......
...@@ -491,7 +491,7 @@ impl<T: Driver> Adapter<T> { ...@@ -491,7 +491,7 @@ impl<T: Driver> Adapter<T> {
pub struct DriverVTable(Opaque<bindings::phy_driver>); pub struct DriverVTable(Opaque<bindings::phy_driver>);
// SAFETY: `DriverVTable` doesn't expose any &self method to access internal data, so it's safe to // SAFETY: `DriverVTable` doesn't expose any &self method to access internal data, so it's safe to
// share `&DriverVTable` across execution context boundries. // share `&DriverVTable` across execution context boundaries.
unsafe impl Sync for DriverVTable {} unsafe impl Sync for DriverVTable {}
/// Creates a [`DriverVTable`] instance from [`Driver`]. /// Creates a [`DriverVTable`] instance from [`Driver`].
......
...@@ -217,7 +217,11 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream { ...@@ -217,7 +217,11 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream {
// freed until the module is unloaded. // freed until the module is unloaded.
#[cfg(MODULE)] #[cfg(MODULE)]
static THIS_MODULE: kernel::ThisModule = unsafe {{ static THIS_MODULE: kernel::ThisModule = unsafe {{
kernel::ThisModule::from_ptr(&kernel::bindings::__this_module as *const _ as *mut _) extern \"C\" {{
static __this_module: kernel::types::Opaque<kernel::bindings::module>;
}}
kernel::ThisModule::from_ptr(__this_module.get())
}}; }};
#[cfg(not(MODULE))] #[cfg(not(MODULE))]
static THIS_MODULE: kernel::ThisModule = unsafe {{ static THIS_MODULE: kernel::ThisModule = unsafe {{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment