Skip to main content

UniqueRefGpuVm

Struct UniqueRefGpuVm 

Source
pub struct UniqueRefGpuVm<T: DriverGpuVm>(/* private fields */);
Expand description

The core of the DRM GPU VA manager.

This object is a unique reference to the VM that can access the interval tree and the Rust data field.

§Invariants

Each GpuVm instance has at most one UniqueRefGpuVm reference.

Implementations§

Source§

impl<T: DriverGpuVm> UniqueRefGpuVm<T>

Source

pub fn sm_map(&mut self, req: OpMapRequest<'_, '_, T>) -> Result

Create a mapping, removing or remapping anything that overlaps.

Internally calls the DriverGpuVm callbacks similar to Self::sm_unmap, except that the DriverGpuVm::sm_step_map is called once to create the requested mapping.

Source

pub fn sm_unmap( &mut self, addr: u64, length: u64, context: &mut T::SmContext<'_>, ) -> Result

Remove any mappings in the given region.

Internally calls DriverGpuVm::sm_step_unmap for ranges entirely contained within the given range, and DriverGpuVm::sm_step_remap for ranges that overlap with the range.

Source§

impl<T: DriverGpuVm> UniqueRefGpuVm<T>

Source

pub fn data_ref(&self) -> &T

Access the data owned by this UniqueRefGpuVm immutably.

Source

pub fn data(&mut self) -> &mut T

Access the data owned by this UniqueRefGpuVm mutably.

Methods from Deref<Target = GpuVm<T>>§

Source

pub fn project<'__pin>( self: Pin<&'__pin mut Self>, ) -> GpuVmProjection<'__pin, T>

Pin-projects all fields of Self.

These fields are structurally pinned:

  • vm

These fields are not structurally pinned:

  • data
Source

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

Returns a raw pointer to the embedded struct drm_gpuvm.

Source

pub fn va_start(&self) -> u64

The start of the VA space.

Source

pub fn va_length(&self) -> u64

The length of the GPU’s virtual address space.

Source

pub fn va_range(&self) -> Range<u64>

Returns the range of the GPU virtual address space.

Source

pub fn obtain( &self, obj: &T::Object, data: impl PinInit<T::VmBoData>, ) -> Result<ARef<GpuVmBo<T>>, AllocError>

Get or create the GpuVmBo for this gem object.

Source

pub fn deferred_cleanup(&self)

Clean up buffer objects that are no longer used.

Source

pub fn is_extobj(&self, obj: &T::Object) -> bool

Check if this GEM object is an external object for this GPUVM.

Trait Implementations§

Source§

impl<T: DriverGpuVm> Deref for UniqueRefGpuVm<T>

Source§

type Target = GpuVm<T>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &GpuVm<T>

Dereferences the value.

Auto Trait Implementations§

§

impl<T> !RefUnwindSafe for UniqueRefGpuVm<T>

§

impl<T> !UnwindSafe for UniqueRefGpuVm<T>

§

impl<T> Freeze for UniqueRefGpuVm<T>

§

impl<T> Send for UniqueRefGpuVm<T>

§

impl<T> Sync for UniqueRefGpuVm<T>

§

impl<T> Unpin for UniqueRefGpuVm<T>

§

impl<T> UnsafeUnpin for UniqueRefGpuVm<T>

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Init<T> for T

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> KnownSize for T

Source§

const MIN_SIZE: usize = const MIN_SIZE: usize = size_of::<T>();

Minimum size of this type known at compile-time.
Source§

const MIN_ALIGN: Alignment = const MIN_ALIGN: Alignment = Alignment::of::<T>();

Minimum alignment of this type known at compile-time.
Source§

fn size(_: *const T) -> usize

Get the size of an object of this type in bytes, with the metadata of the given pointer.
Source§

impl<T> PinInit<T> for T

Source§

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

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
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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.
Source§

impl<T, U, const N: u32> TryIntoBounded<T, N> for U
where T: Integer, U: TryInto<T>,

Source§

fn try_into_bounded(self) -> Option<Bounded<T, N>>

Attempts to convert self into a Bounded using N bits. Read more