linux/rust/kernel
Gary Guo 38c3cbf507 rust: ptr: add panicking index projection variant
There have been a few cases where the programmer knows that the indices are
in bounds but the compiler cannot deduce that. This is also
compiler-version-dependent, so using build indexing here can be
problematic. On the other hand, it is also not ideal to use the fallible
variant, as it adds an error handling path that is never hit.

Add a new panicking index projection for this scenario. Like all panicking
operations, this should be used carefully only in cases where the user
knows the index is going to be in bounds, and panicking would indicate
something is catastrophically wrong.

To signify this, require users to explicitly denote the type of index being
used. The existing two types of index projections also gain the keyworded
version, which will be the recommended way going forward.

The keyworded syntax also paves the way of perhaps adding more flavors in
the future, e.g. `unsafe` index projection. However, unless the code is
extremely performance sensitive and bounds checking cannot be tolerated,
the panicking variant is safer and should be preferred, so it will be left
to the future when demand arises.

Signed-off-by: Gary Guo <gary@garyguo.net>
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Andreas Hindborg <a.hindborg@kernel.org>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Acked-by: Danilo Krummrich <dakr@kernel.org>
Link: https://patch.msgid.link/20260602-projection-syntax-rework-v2-3-6989470f5440@garyguo.net
[ Fixed broken intra-doc link. Added a few extra intra-doc links. Reworded
  some docs slightly. - Miguel ]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
2026-06-05 10:16:11 +02:00
..
alloc rust: alloc: cleanup doctest imports to "kernel vertical" style 2026-05-20 17:34:17 +02:00
block rust: block: update const_refs_to_static MSRV TODO comment 2026-04-07 10:00:24 +02:00
debugfs Driver core changes for 7.0-rc1 2026-02-11 17:43:59 -08:00
device rust: device: replace kernel::c_str! with C-Strings 2025-12-22 17:30:24 +01:00
drm rust: drm: fix unsound initialization in drm::Device::new 2026-05-03 14:04:57 +02:00
fs rust: fs: add file::Offset type alias 2025-11-05 00:05:38 +01:00
gpu rust: gpu: Add GPU buddy allocator bindings 2026-03-23 21:41:47 +01:00
interop rust: interop: Add list module for C linked list interface 2026-03-23 20:29:28 +01:00
io rust: io: introduce write_reg and LocatedRegister 2026-03-17 20:04:11 +01:00
iommu rust: iommu: fix srctree link warning 2026-01-22 09:19:30 +01:00
irq rust: irq: move 'static bounds to traits 2026-03-03 20:33:26 +01:00
list Locking updates for v7.1: 2026-04-14 12:36:25 -07:00
mm mm: rename zap_page_range_single() to zap_vma_range() 2026-04-05 13:53:15 -07:00
net rust: net: replace kernel::c_str! with C-Strings 2026-01-05 16:32:39 -08:00
num Driver core changes for 7.1-rc1 2026-04-13 19:03:11 -07:00
pci rust: pci: io: remove overloaded Io methods of ConfigSpace 2026-03-17 20:02:09 +01:00
ptr rust: ptr: add panicking index projection variant 2026-06-05 10:16:11 +02:00
str rust: str: add radix prefixed integer parsing functions 2025-11-03 14:40:45 +01:00
sync rust: sync: add #[must_use] to GlobalGuard and GlobalLock::try_lock 2026-06-04 22:22:33 +02:00
time hrtimer: add usage examples to documentation 2026-03-23 08:31:00 +01:00
.gitignore
acpi.rs rust: acpi: replace core::mem::zeroed with pin_init::zeroed 2025-10-27 20:27:05 +01:00
alloc.rs rust: alloc: cleanup imports and use "kernel vertical" style 2026-05-20 17:34:17 +02:00
auxiliary.rs Linux 6.19-rc7 2026-01-26 13:23:52 +01:00
bitmap.rs rust: bitmap: add BitmapVec::new_inline() 2025-11-26 11:25:35 -05:00
bits.rs rust: bits: always inline functions using build_assert with arguments 2026-01-18 20:40:11 +01:00
block.rs
bug.rs rust: bug: Support DEBUG_BUGVERBOSE_DETAILED option 2026-01-30 05:18:17 +01:00
build_assert.rs rust: rework build_assert! documentation 2026-03-30 02:03:52 +02:00
clk.rs rust: clk: implement Send and Sync 2026-04-03 11:57:35 +02:00
configfs.rs rust: configfs: replace kernel::c_str! with C-Strings 2026-01-15 09:26:49 +01:00
cpu.rs
cpufreq.rs rust: cpufreq: clean new clippy::map_or_identity lint for Rust 1.98.0 2026-06-01 08:25:58 +02:00
cpumask.rs rust: cpumask: rename methods of Cpumask for clarity and consistency 2026-01-27 11:21:23 +05:30
cred.rs Char/Misc/IIO/Binder changes for 6.18-rc1 2025-10-04 16:26:32 -07:00
debugfs.rs rust: debugfs: Use kernel Atomic type in docs example 2026-01-19 15:02:46 +01:00
device_id.rs rust: device_id: replace incorrect word in safety documentation 2025-12-29 14:09:18 +01:00
device.rs rust: device: add device name method 2026-03-24 23:51:23 +01:00
devres.rs rust: devres: embed struct devres_node directly 2026-03-18 00:47:14 +01:00
dma.rs rust: ptr: add panicking index projection variant 2026-06-05 10:16:11 +02:00
driver.rs Linux 6.19-rc7 2026-01-26 13:23:52 +01:00
error.rs rust: error: replace match + panic in const context with const expect 2026-05-28 11:08:27 +02:00
faux.rs rust: faux: use "kernel vertical" style for imports 2026-01-07 19:56:00 +01:00
firmware.rs rust: firmware: replace kernel::c_str! with C-Strings 2025-11-17 00:53:47 +01:00
fmt.rs rust: fmt: use vertical import style 2026-05-20 00:47:24 +02:00
fs.rs
generated_arch_reachable_asm.rs.S
generated_arch_static_branch_asm.rs.S
generated_arch_warn_asm.rs.S
gpu.rs rust: gpu: Add GPU buddy allocator bindings 2026-03-23 21:41:47 +01:00
i2c.rs rust: i2c: Update ARef and AlwaysRefCounted imports to use sync::aref 2026-03-15 20:30:29 +01:00
id_pool.rs rust: id_pool: do not immediately acquire new ids 2025-12-02 14:17:09 -05:00
impl_flags.rs rust: add impl_flags! macro for defining common bitflag operations 2026-02-02 08:09:11 +01:00
init.rs rust: init: use #[default_error(err)] for the initializer macros 2026-01-17 10:51:42 +01:00
interop.rs rust: interop: Add list module for C linked list interface 2026-03-23 20:29:28 +01:00
io.rs rust: io: introduce write_reg and LocatedRegister 2026-03-17 20:04:11 +01:00
ioctl.rs
iov.rs
irq.rs
jump_label.rs
kunit.rs rust: kunit: fix warning when !CONFIG_PRINTK 2026-03-02 10:01:15 -07:00
lib.rs drm for v7.1-rc1 2026-04-15 08:45:00 -07:00
list.rs rust: list: hide macros from top-level kernel doc 2026-03-27 12:15:47 +01:00
maple_tree.rs rust: maple_tree: rcu_read_lock() in destructor to silence lockdep 2025-12-23 11:23:15 -08:00
miscdevice.rs rust: redefine bindings::compat_ptr_ioctl in Rust 2026-01-16 14:54:11 +01:00
mm.rs
module_param.rs Modules changes for v6.19-rc1 2025-12-06 08:27:07 -08:00
net.rs
num.rs rust: num: add Bounded integer wrapping type 2025-11-19 00:22:24 +01:00
of.rs rust: of: use core::ffi::CStr method names 2025-09-16 09:26:59 +02:00
opp.rs Rust changes for v6.19 2025-12-03 14:16:49 -08:00
page.rs rust: Return Option from page_align and ensure no usize overflow 2025-12-29 15:32:53 +01:00
pci.rs rust: pci: re-export ConfigSpace 2026-02-01 22:18:24 +01:00
pid_namespace.rs
platform.rs Linux 6.19-rc7 2026-01-26 13:23:52 +01:00
prelude.rs rust: doc: disable doc inlining for all prelude items 2026-05-20 00:47:24 +02:00
print.rs rust: print: Add pr_*_once macros 2026-01-30 05:47:05 +01:00
processor.rs
ptr.rs Rust timekeeping changes for v7.1 2026-04-08 10:44:11 +02:00
pwm.rs rust: pwm: Simplify to_result call sites and unsafe blocks 2026-01-20 18:49:58 +01:00
rbtree.rs Rust changes for v6.20 / v7.0 2026-02-10 11:53:01 -08:00
regulator.rs rust: regulator: do not assume that regulator_get() returns non-null 2026-03-24 13:08:21 +00:00
revocable.rs
safety.rs rust: safety: introduce unsafe_precondition_assert! macro 2026-02-02 08:10:48 +01:00
scatterlist.rs rust: scatterlist: Update ARef imports to use sync::aref 2025-12-18 17:25:45 +01:00
security.rs rust_binder: add Rust Binder driver 2025-09-19 09:40:46 +02:00
seq_file.rs rust: seq_file: replace kernel::c_str! with C-Strings 2026-01-29 15:32:40 +01:00
sizes.rs rust: sizes: add SizeConstants trait for device address space constants 2026-04-07 12:57:50 +02:00
soc.rs rust: Add soc_device support 2025-12-28 12:43:56 +01:00
std_vendor.rs
str.rs Rust timekeeping changes for v7.1 2026-04-08 10:44:11 +02:00
sync.rs rust: sync: Replace kernel::c_str! with C-Strings 2026-01-28 09:25:44 +01:00
task.rs Char/Misc/IIO/and others driver updates for 7.1-rc1 2026-04-24 13:23:50 -07:00
time.rs rust: time: make ClockSource unsafe trait 2026-03-23 08:29:48 +01:00
tracepoint.rs
transmute.rs rust: transmute: simplify code with Rust 1.80.0 split_at_*checked() 2026-04-07 10:00:24 +02:00
types.rs rust: types: remove temporary re-exports of ARef and AlwaysRefCounted 2026-03-15 20:30:29 +01:00
uaccess.rs Char/Misc/IIO/and others driver updates for 7.1-rc1 2026-04-24 13:23:50 -07:00
usb.rs rust: usb: Update AlwaysRefCounted imports to use sync::aref 2026-03-15 20:30:29 +01:00
workqueue.rs rust: workqueue: use new sync::aref path for imports 2026-03-26 15:45:34 +00:00
xarray.rs rust: kernel: mark as #[inline] all From::from()s for Error 2026-03-27 12:49:00 +01:00