On 06.08.24 20:58, Danilo Krummrich wrote: > On Tue, Aug 06, 2024 at 04:54:10PM +0000, Benno Lossin wrote: >> On 05.08.24 17:19, Danilo Krummrich wrote: >>> `Allocator`s, such as `Kmalloc`, will be used by e.g. `Box` and `Vec` in >>> subsequent patches, and hence this dependency propagates throughout the >>> whole kernel. >>> >>> Add the `allocator_test` module that provides an empty implementation >>> for all `Allocator`s in the kernel, such that we don't break the >>> `rusttest` make target in subsequent patches. >> >> This is confusing, since you are talking about both our new `Allocator` >> trait, allocators and the `alloc` crate `Allocator`. > > I never mention the `alloc` crate `Allocator` here. Seems like I confused myself... >>> Reviewed-by: Alice Ryhl <aliceryhl@xxxxxxxxxx> >>> Signed-off-by: Danilo Krummrich <dakr@xxxxxxxxxx> >>> --- >>> rust/kernel/alloc.rs | 9 +++++++-- >>> rust/kernel/alloc/allocator_test.rs | 19 +++++++++++++++++++ >>> 2 files changed, 26 insertions(+), 2 deletions(-) >>> create mode 100644 rust/kernel/alloc/allocator_test.rs >>> >>> diff --git a/rust/kernel/alloc.rs b/rust/kernel/alloc.rs >>> index bc01a17df5e0..942e2755f217 100644 >>> --- a/rust/kernel/alloc.rs >>> +++ b/rust/kernel/alloc.rs >>> @@ -2,12 +2,17 @@ >>> >>> //! Extensions to the [`alloc`] crate. >>> >>> -#[cfg(not(test))] >>> -#[cfg(not(testlib))] >>> +#[cfg(not(any(test, testlib)))] >>> pub mod allocator; >>> pub mod box_ext; >>> pub mod vec_ext; >>> >>> +#[cfg(any(test, testlib))] >>> +pub mod allocator_test; >>> + >>> +#[cfg(any(test, testlib))] >>> +pub use self::allocator_test as allocator; >>> + >>> /// Indicates an allocation error. >>> #[derive(Copy, Clone, PartialEq, Eq, Debug)] >>> pub struct AllocError; >>> diff --git a/rust/kernel/alloc/allocator_test.rs b/rust/kernel/alloc/allocator_test.rs >>> new file mode 100644 >>> index 000000000000..4785efc474a7 >>> --- /dev/null >>> +++ b/rust/kernel/alloc/allocator_test.rs >>> @@ -0,0 +1,19 @@ >>> +// SPDX-License-Identifier: GPL-2.0 >>> + >>> +#![allow(missing_docs)] >>> + >>> +use super::{AllocError, Allocator, Flags}; >>> +use core::alloc::Layout; >>> +use core::ptr::NonNull; >>> + >>> +pub struct Kmalloc; >>> + >>> +unsafe impl Allocator for Kmalloc { >>> + unsafe fn realloc( >>> + _ptr: Option<NonNull<u8>>, >>> + _layout: Layout, >>> + _flags: Flags, >>> + ) -> Result<NonNull<[u8]>, AllocError> { >>> + panic!(); >> >> Does `build_error!()` also work? If yes, then I would prefer that. > > Probably, but it also probably doesn't matter too much. A later patch in the > series replaces this with a `Cmalloc` implementation and type aliases all kernel > allocators (e.g. `Kmalloc`) to it. What prevents you from doing the `Cmalloc` patch here? `build_error!` probably doesn't work, since we probably allocate in rusttest, right? --- Cheers, Benno