summaryrefslogtreecommitdiff
path: root/rust/kernel/alloc/allocator_test.rs
diff options
context:
space:
mode:
authorDanilo Krummrich <dakr@kernel.org>2025-08-20 16:53:39 +0200
committerDanilo Krummrich <dakr@kernel.org>2025-09-04 23:33:27 +0200
commit7937dca770393d34d1ad217580c5446d2e45417f (patch)
treefb6e608ddfbd2c0d05acb326b4a7f922b7136b3d /rust/kernel/alloc/allocator_test.rs
parent8e92c9902ff11a1c2aab229a3d7d4c1d7e5b698f (diff)
rust: alloc: implement VmallocPageIter
Introduce the VmallocPageIter type; an instance of VmallocPageIter may be exposed by owners of vmalloc allocations to provide borrowed access to its backing pages. For instance, this is useful to access and borrow the backing pages of allocation primitives, such as Box and Vec, backing a scatterlist. Reviewed-by: Daniel Almeida <daniel.almeida@collabora.com> Reviewed-by: Alexandre Courbot <acourbot@nvidia.com> Tested-by: Alexandre Courbot <acourbot@nvidia.com> Reviewed-by: Alice Ryhl <aliceryhl@google.com> Suggested-by: Alice Ryhl <aliceryhl@google.com> Link: https://lore.kernel.org/r/20250820145434.94745-4-dakr@kernel.org [ Drop VmallocPageIter::base_address(), move to allocator/iter.rs and stub VmallocPageIter for allocator_test.rs. - Danilo ] Signed-off-by: Danilo Krummrich <dakr@kernel.org>
Diffstat (limited to 'rust/kernel/alloc/allocator_test.rs')
-rw-r--r--rust/kernel/alloc/allocator_test.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/rust/kernel/alloc/allocator_test.rs b/rust/kernel/alloc/allocator_test.rs
index a3074480bd8d..f46b4b671389 100644
--- a/rust/kernel/alloc/allocator_test.rs
+++ b/rust/kernel/alloc/allocator_test.rs
@@ -12,8 +12,10 @@
use super::{flags::*, AllocError, Allocator, Flags};
use core::alloc::Layout;
use core::cmp;
+use core::marker::PhantomData;
use core::ptr;
use core::ptr::NonNull;
+use kernel::page;
/// The userspace allocator based on libc.
pub struct Cmalloc;
@@ -22,6 +24,33 @@ pub type Kmalloc = Cmalloc;
pub type Vmalloc = Kmalloc;
pub type KVmalloc = Kmalloc;
+pub struct VmallocPageIter<'a> {
+ _p: PhantomData<page::BorrowedPage<'a>>,
+}
+
+impl<'a> Iterator for VmallocPageIter<'a> {
+ type Item = page::BorrowedPage<'a>;
+
+ fn next(&mut self) -> Option<Self::Item> {
+ None
+ }
+}
+
+impl<'a> VmallocPageIter<'a> {
+ #[allow(clippy::missing_safety_doc)]
+ pub unsafe fn new(_buf: NonNull<u8>, _size: usize) -> Self {
+ Self { _p: PhantomData }
+ }
+
+ pub fn size(&self) -> usize {
+ 0
+ }
+
+ pub fn page_count(&self) -> usize {
+ 0
+ }
+}
+
extern "C" {
#[link_name = "aligned_alloc"]
fn libc_aligned_alloc(align: usize, size: usize) -> *mut crate::ffi::c_void;