Trait kernel::page::AsPageIter

source ·
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§

source

type Iter<'a>: Iterator<Item = BorrowedPage<'a>> where Self: 'a

The Iterator type, e.g. VmallocPageIter.

Required Methods§

source

fn page_iter(&mut self) -> Self::Iter<'_>

Returns an Iterator of BorrowedPage items over all pages owned by self.

Object Safety§

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)? };
§

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)? };
§

type Iter<'a> = VmallocPageIter<'a> where T: 'a