pub trait AsPageIter {
type Iter<'a>: Iterator<Item = BorrowedPage<'a>>
where Self: 'a;
// Required method
fn page_iter(&mut self) -> Self::Iter<'_>;
}
Expand description
Trait to be implemented by types which provide an Iterator
implementation of
BorrowedPage
items, such as VmallocPageIter
.
Required Associated Types§
Sourcetype Iter<'a>: Iterator<Item = BorrowedPage<'a>>
where
Self: 'a
type Iter<'a>: Iterator<Item = BorrowedPage<'a>> where Self: 'a
The Iterator
type, e.g. VmallocPageIter
.
Required Methods§
Sourcefn page_iter(&mut self) -> Self::Iter<'_>
fn page_iter(&mut self) -> Self::Iter<'_>
Returns an Iterator
of BorrowedPage
items over all pages owned by self
.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementors§
Source§impl<T> AsPageIter for VBox<T>
§Examples
use kernel::alloc::allocator::VmallocPageIter;
use kernel::page::{AsPageIter, PAGE_SIZE};
let mut vbox = VBox::new((), GFP_KERNEL)?;
assert!(vbox.page_iter().next().is_none());
let mut vbox = VBox::<[u8; PAGE_SIZE]>::new_uninit(GFP_KERNEL)?;
let page = vbox.page_iter().next().expect("At least one page should be available.\n");
// SAFETY: There is no concurrent read or write to the same page.
unsafe { page.fill_zero_raw(0, PAGE_SIZE)? };
impl<T> AsPageIter for VBox<T>
§Examples
use kernel::alloc::allocator::VmallocPageIter;
use kernel::page::{AsPageIter, PAGE_SIZE};
let mut vbox = VBox::new((), GFP_KERNEL)?;
assert!(vbox.page_iter().next().is_none());
let mut vbox = VBox::<[u8; PAGE_SIZE]>::new_uninit(GFP_KERNEL)?;
let page = vbox.page_iter().next().expect("At least one page should be available.\n");
// SAFETY: There is no concurrent read or write to the same page.
unsafe { page.fill_zero_raw(0, PAGE_SIZE)? };
type Iter<'a> = VmallocPageIter<'a> where T: 'a
Source§impl<T> AsPageIter for VVec<T>
§Examples
use kernel::alloc::allocator::VmallocPageIter;
use kernel::page::{AsPageIter, PAGE_SIZE};
let mut vec = VVec::<u8>::new();
assert!(vec.page_iter().next().is_none());
vec.reserve(PAGE_SIZE, GFP_KERNEL)?;
let page = vec.page_iter().next().expect("At least one page should be available.\n");
// SAFETY: There is no concurrent read or write to the same page.
unsafe { page.fill_zero_raw(0, PAGE_SIZE)? };
impl<T> AsPageIter for VVec<T>
§Examples
use kernel::alloc::allocator::VmallocPageIter;
use kernel::page::{AsPageIter, PAGE_SIZE};
let mut vec = VVec::<u8>::new();
assert!(vec.page_iter().next().is_none());
vec.reserve(PAGE_SIZE, GFP_KERNEL)?;
let page = vec.page_iter().next().expect("At least one page should be available.\n");
// SAFETY: There is no concurrent read or write to the same page.
unsafe { page.fill_zero_raw(0, PAGE_SIZE)? };