Skip to content

Commit 3e491bc

Browse files
ojedaintel-lab-lkp
authored andcommitted
rust: clarify the language unstable features in use
We track the details of which Rust features we use at our usual "live list" [1] (and its sub-lists), but in light of a discussion in the LWN article [2], it would help to clarify it in the source code. In particular, we are very close to rely only on stable Rust language-wise -- essentially only two language features remain (including the `kernel` crate). Thus add some details in both the feature list of the `kernel` crate as well as the list of allowed features. This does not over every single feature, and there are quite a few non-language features that we use too. To have the full picture, please refer to [1]. Link: Rust-for-Linux#2 [1] Link: https://lwn.net/Articles/1015409/ [2] Suggested-by: Andreas Hindborg <[email protected]> Signed-off-by: Miguel Ojeda <[email protected]>
1 parent e6ea10d commit 3e491bc

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

rust/kernel/lib.rs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,34 @@
1212
//! do so first instead of bypassing this crate.
1313
1414
#![no_std]
15-
#![feature(arbitrary_self_types)]
16-
#![cfg_attr(CONFIG_RUSTC_HAS_COERCE_POINTEE, feature(derive_coerce_pointee))]
17-
#![cfg_attr(not(CONFIG_RUSTC_HAS_COERCE_POINTEE), feature(coerce_unsized))]
18-
#![cfg_attr(not(CONFIG_RUSTC_HAS_COERCE_POINTEE), feature(dispatch_from_dyn))]
19-
#![cfg_attr(not(CONFIG_RUSTC_HAS_COERCE_POINTEE), feature(unsize))]
15+
16+
// Please see https://github.com/Rust-for-Linux/linux/issues/2 for details on
17+
// the unstable features in use.
18+
19+
// Stable since Rust 1.79.0.
2020
#![feature(inline_const)]
21+
22+
// Stable since Rust 1.81.0.
2123
#![feature(lint_reasons)]
22-
// Stable in Rust 1.82
24+
25+
// Stable since Rust 1.82.0.
2326
#![feature(raw_ref_op)]
24-
// Stable in Rust 1.83
27+
28+
// Stable since Rust 1.83.0.
2529
#![feature(const_maybe_uninit_as_mut_ptr)]
2630
#![feature(const_mut_refs)]
2731
#![feature(const_ptr_write)]
2832
#![feature(const_refs_to_cell)]
2933

34+
// Expected to become stable.
35+
#![feature(arbitrary_self_types)]
36+
37+
// `feature(derive_coerce_pointee)` is the one expected to become stable.
38+
#![cfg_attr(CONFIG_RUSTC_HAS_COERCE_POINTEE, feature(derive_coerce_pointee))]
39+
#![cfg_attr(not(CONFIG_RUSTC_HAS_COERCE_POINTEE), feature(coerce_unsized))]
40+
#![cfg_attr(not(CONFIG_RUSTC_HAS_COERCE_POINTEE), feature(dispatch_from_dyn))]
41+
#![cfg_attr(not(CONFIG_RUSTC_HAS_COERCE_POINTEE), feature(unsize))]
42+
3043
// Ensure conditional compilation based on the kernel configuration works;
3144
// otherwise we may silently break things like initcall handling.
3245
#[cfg(not(CONFIG_RUST))]

scripts/Makefile.build

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,14 @@ $(obj)/%.lst: $(obj)/%.c FORCE
226226
# Compile Rust sources (.rs)
227227
# ---------------------------------------------------------------------------
228228

229+
# The features in this list are the ones allowed for non-`rust/` code.
230+
#
231+
# - Stable since Rust 1.81.0: `feature(lint_reasons)`.
232+
# - Stable since Rust 1.82.0: `feature(asm_const)`, `feature(raw_ref_op)`.
233+
# - Stable since Rust 1.87.0: `feature(asm_goto)`.
234+
#
235+
# Please see https://github.com/Rust-for-Linux/linux/issues/2 for details on
236+
# the unstable features in use.
229237
rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,lint_reasons,raw_ref_op
230238

231239
# `--out-dir` is required to avoid temporaries being created by `rustc` in the

0 commit comments

Comments
 (0)