summaryrefslogtreecommitdiffstats
path: root/rust/kernel/alloc/layout.rs
diff options
context:
space:
mode:
authorJimmy Ostler <jtostler1@gmail.com>2024-12-19 22:25:33 -0800
committerMiguel Ojeda <ojeda@kernel.org>2025-01-13 23:45:30 +0100
commit91da5a24144e5a82bf88c5f72068cf1628198668 (patch)
tree4c39526b0a90efa79e3422fc5abb6370fcb3f47e /rust/kernel/alloc/layout.rs
parent59d5846594e9f82c11af72151de7cef3f325dd4b (diff)
downloadlinux-stable-91da5a24144e5a82bf88c5f72068cf1628198668.tar.gz
linux-stable-91da5a24144e5a82bf88c5f72068cf1628198668.tar.bz2
linux-stable-91da5a24144e5a82bf88c5f72068cf1628198668.zip
rust: alloc: add doctest for `ArrayLayout::new()`
Add a rustdoc example and Kunit test to the `ArrayLayout` struct's `ArrayLayout::new()` function. This patch depends on the first patch in this series in order for the KUnit test to compile. Suggested-by: Boqun Feng <boqun.feng@gmail.com> Link: https://github.com/Rust-for-Linux/linux/issues/1131 Reviewed-by: Danilo Krummrich <dakr@kernel.org> Signed-off-by: Jimmy Ostler <jtostler1@gmail.com> Link: https://lore.kernel.org/r/f1564da5bcaa6be87aee312767a1d1694a03d1b7.1734674670.git.jtostler1@gmail.com [ Added periods to example comments. Reworded title. - Miguel ] Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Diffstat (limited to 'rust/kernel/alloc/layout.rs')
-rw-r--r--rust/kernel/alloc/layout.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/rust/kernel/alloc/layout.rs b/rust/kernel/alloc/layout.rs
index 4b3cd7fdc816..93ed514f7cc7 100644
--- a/rust/kernel/alloc/layout.rs
+++ b/rust/kernel/alloc/layout.rs
@@ -43,6 +43,25 @@ impl<T> ArrayLayout<T> {
/// # Errors
///
/// When `len * size_of::<T>()` overflows or when `len * size_of::<T>() > isize::MAX`.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// # use kernel::alloc::layout::{ArrayLayout, LayoutError};
+ /// let layout = ArrayLayout::<i32>::new(15)?;
+ /// assert_eq!(layout.len(), 15);
+ ///
+ /// // Errors because `len * size_of::<T>()` overflows.
+ /// let layout = ArrayLayout::<i32>::new(isize::MAX as usize);
+ /// assert!(layout.is_err());
+ ///
+ /// // Errors because `len * size_of::<i32>() > isize::MAX`,
+ /// // even though `len < isize::MAX`.
+ /// let layout = ArrayLayout::<i32>::new(isize::MAX as usize / 2);
+ /// assert!(layout.is_err());
+ ///
+ /// # Ok::<(), Error>(())
+ /// ```
pub const fn new(len: usize) -> Result<Self, LayoutError> {
match len.checked_mul(core::mem::size_of::<T>()) {
Some(size) if size <= ISIZE_MAX => {