Struct MmWithUser

Source
pub struct MmWithUser { /* private fields */ }
Expand description

A wrapper for the kernel’s struct mm_struct.

This type is like Mm, but with non-zero mm_users. It can only be used when mm_users can be proven to be non-zero at compile-time, usually because the relevant code holds an mmget refcount. It can be used to access the associated address space.

The ARef<MmWithUser> smart pointer holds an mmget refcount. Its destructor may sleep.

§Invariants

Values of this type are always refcounted using mmget. The value of mm_users is non-zero.

Implementations§

Source§

impl MmWithUser

Source

pub unsafe fn from_raw<'a>(ptr: *const mm_struct) -> &'a MmWithUser

Obtain a reference from a raw pointer.

§Safety

The caller must ensure that ptr points at an mm_struct, and that mm_users remains non-zero for the duration of the lifetime ’a.

Source

pub fn into_mmput_async(me: ARef<MmWithUser>) -> ARef<MmWithUserAsync>

Use mmput_async when dropping this refcount.

Source

pub fn lock_vma_under_rcu(&self, vma_addr: usize) -> Option<VmaReadGuard<'_>>

Attempt to access a vma using the vma read lock.

This is an optimistic trylock operation, so it may fail if there is contention. In that case, you should fall back to taking the mmap read lock.

When per-vma locks are disabled, this always returns None.

Source

pub fn mmap_read_lock(&self) -> MmapReadGuard<'_>

Lock the mmap read lock.

Source

pub fn mmap_read_trylock(&self) -> Option<MmapReadGuard<'_>>

Try to lock the mmap read lock.

Methods from Deref<Target = Mm>§

Source

pub fn as_raw(&self) -> *mut mm_struct

Returns a raw pointer to the inner mm_struct.

Source

pub fn mmget_not_zero(&self) -> Option<ARef<MmWithUser>>

Calls mmget_not_zero and returns a handle if it succeeds.

Trait Implementations§

Source§

impl AlwaysRefCounted for MmWithUser

Source§

fn inc_ref(&self)

Increments the reference count on the object.
Source§

unsafe fn dec_ref(obj: NonNull<Self>)

Decrements the reference count on the object. Read more
Source§

impl Deref for MmWithUser

Source§

type Target = Mm

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Mm

Dereferences the value.
Source§

impl Send for MmWithUser

Source§

impl Sync for MmWithUser

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, E> Init<T, E> for T

Source§

unsafe fn __init(self, slot: *mut T) -> Result<(), E>

Initializes slot. Read more
Source§

fn chain<F>(self, f: F) -> ChainInit<Self, F, T, E>
where F: FnOnce(&mut T) -> Result<(), E>,

First initializes the value using self then calls the function f with the initialized value. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, E> PinInit<T, E> for T

Source§

unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), E>

Initializes slot. Read more
Source§

fn pin_chain<F>(self, f: F) -> ChainPinInit<Self, F, T, E>
where F: FnOnce(Pin<&mut T>) -> Result<(), E>,

First initializes the value using self then calls the function f with the initialized value. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.