Skip to main content

MshvVtl

Struct MshvVtl 

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

An open mshv_vtl device file.

Implementations§

Source§

impl MshvVtl

Source

pub fn get_realm_config(&self) -> Result<RsiRealmConfig, Error>

Get the realm-specific parameters from the RMM

Source

pub fn rsi_sysreg_write( &self, vtl: GuestVtl, sysreg: u64, value: u64, ) -> Result<(), SetRegError>

Write the value of a system register for the given VTL

Source

pub fn rsi_sysreg_read( &self, vtl: GuestVtl, sysreg: u64, value: &mut u64, ) -> Result<(), GetRegError>

Read the value of a system register for the given VTL.

Source

pub fn rsi_set_mem_perm( &self, vtl: GuestVtl, range: &MemoryRange, ) -> Result<(), HvError>

Assign given memory range to the VTL.

Source

pub fn rsi_get_ipa_state( &self, fipa: u64, ) -> Result<Option<u64>, GetIpaStateError>

Get the ipa RIPAS state

Source§

impl MshvVtl

Source

pub fn pvalidate_pages( &self, range: MemoryRange, validate: bool, terminate_on_failure: bool, ) -> Result<(), SnpPageError>

Execute the pvalidate instruction on the specified memory range.

The range must not be mapped in the kernel as RAM.

Source

pub fn rmpadjust_pages( &self, range: MemoryRange, value: SevRmpAdjust, terminate_on_failure: bool, ) -> Result<(), SnpPageError>

Execute the rmpadjust instruction on the specified memory range.

The range must not be mapped in the kernel as RAM.

Source

pub fn rmpquery_page( &self, gpa: u64, vtl: GuestVtl, ) -> Result<SevRmpAdjust, SnpPageError>

Gets the current vtl permissions for a page. Note: only supported on Genoa+

Source§

impl MshvVtl

Source

pub fn tdx_set_page_attributes( &self, range: MemoryRange, attributes: TdgMemPageGpaAttr, mask: TdgMemPageAttrWriteR8, ) -> Result<(), TdCallResultCode>

Issues a tdcall to set page attributes.

Source

pub fn tdx_accept_pages( &self, range: MemoryRange, attributes: Option<(TdgMemPageGpaAttr, TdgMemPageAttrWriteR8)>, ) -> Result<(), AcceptPagesError>

Issues a tdcall to accept pages, optionally also setting attributes.

These operations are combined because this code tries accepting at 2MB granularity first and then falls back to 4KB. A separate call to Self::tdx_set_page_attributes has to re-derive the appropriate granularity.

Source

pub fn tdx_release_pages( &self, range: MemoryRange, ) -> Result<(), TdgPageReleaseError>

Issues tdcalls to release pages.

Source

pub fn tdx_get_config_flags(&self) -> TdConfigFlags

Issues tdcall to get TD-scoped config flags.

Source

pub fn tdx_read_features0(&self) -> Result<TdxFeatures0, TdCallResult>

Reads the global-scope TDX_FEATURES0 metadata field via the TDG.SYS.RD TDCALL, which enumerates optional TDX module features (including hardware-bound sealing support).

Returns an error if the module does not support TDG.SYS.RD (older modules) or rejects the field.

Source

pub fn tdx_enable_hw_seal_keys(&self) -> Result<bool, TdCallResult>

Attempts to opt this TD into hardware-bound seal keys by setting TD_CTLS.ENABLE_HW_SEAL_KEYS, enabling the TDG.MR.KEY.GET TDCALL that backs VMGS hardware key sealing.

Returns Ok(true) if the bit is set after the operation (sealing keys are available), or Ok(false) if the TDX module does not support sealing.

A TDX module that does not implement sealing treats ENABLE_HW_SEAL_KEYS as a reserved bit and may silently ignore the masked write while still returning success. The write status alone is therefore not sufficient, so this reads TD_CTLS back and reports whether the bit actually stuck.

Source§

impl MshvVtl

Source

pub fn add_vtl0_memory( &self, mem_range: MemoryRange, shared: bool, ) -> Result<(), Error>

Adds the VTL0 memory as a ZONE_DEVICE memory (I/O) to support DMA from the guest.

Trait Implementations§

Source§

impl Debug for MshvVtl

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. 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.

§

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

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
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.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more