| From 5049ac82cd3fc92d95b16d696eb455f3477d6fa3 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 16 Aug 2025 22:42:15 +0200 |
| Subject: rust: alloc: fix `rusttest` by providing `Cmalloc::aligned_layout` |
| too |
| |
| From: Miguel Ojeda <ojeda@kernel.org> |
| |
| [ Upstream commit 0f580d5d3d9d9cd0953695cd32e43aac3a946338 ] |
| |
| Commit fde578c86281 ("rust: alloc: replace aligned_size() with |
| Kmalloc::aligned_layout()") provides a public `aligned_layout` function |
| in `Kamlloc`, but not in `Cmalloc`, and thus uses of it will trigger an |
| error in `rusttest`. |
| |
| Such a user appeared in the following commit 22ab0641b939 ("rust: drm: |
| ensure kmalloc() compatible Layout"): |
| |
| error[E0599]: no function or associated item named `aligned_layout` found for struct `alloc::allocator_test::Cmalloc` in the current scope |
| --> rust/kernel/drm/device.rs:100:31 |
| | |
| 100 | let layout = Kmalloc::aligned_layout(Layout::new::<Self>()); |
| | ^^^^^^^^^^^^^^ function or associated item not found in `Cmalloc` |
| | |
| ::: rust/kernel/alloc/allocator_test.rs:19:1 |
| | |
| 19 | pub struct Cmalloc; |
| | ------------------ function or associated item `aligned_layout` not found for this struct |
| |
| Thus add an equivalent one for `Cmalloc`. |
| |
| Fixes: fde578c86281 ("rust: alloc: replace aligned_size() with Kmalloc::aligned_layout()") |
| Signed-off-by: Miguel Ojeda <ojeda@kernel.org> |
| Link: https://lore.kernel.org/r/20250816204215.2719559-1-ojeda@kernel.org |
| Signed-off-by: Danilo Krummrich <dakr@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| rust/kernel/alloc/allocator_test.rs | 11 +++++++++++ |
| 1 file changed, 11 insertions(+) |
| |
| diff --git a/rust/kernel/alloc/allocator_test.rs b/rust/kernel/alloc/allocator_test.rs |
| index c37d4c0c64e9..ec13385489df 100644 |
| --- a/rust/kernel/alloc/allocator_test.rs |
| +++ b/rust/kernel/alloc/allocator_test.rs |
| @@ -22,6 +22,17 @@ pub type Kmalloc = Cmalloc; |
| pub type Vmalloc = Kmalloc; |
| pub type KVmalloc = Kmalloc; |
| |
| +impl Cmalloc { |
| + /// Returns a [`Layout`] that makes [`Kmalloc`] fulfill the requested size and alignment of |
| + /// `layout`. |
| + pub fn aligned_layout(layout: Layout) -> Layout { |
| + // Note that `layout.size()` (after padding) is guaranteed to be a multiple of |
| + // `layout.align()` which together with the slab guarantees means that `Kmalloc` will return |
| + // a properly aligned object (see comments in `kmalloc()` for more information). |
| + layout.pad_to_align() |
| + } |
| +} |
| + |
| extern "C" { |
| #[link_name = "aligned_alloc"] |
| fn libc_aligned_alloc(align: usize, size: usize) -> *mut crate::ffi::c_void; |
| -- |
| 2.50.1 |
| |