struct PvClockWorker {
    tsc_frequency: u64,
    suspend_time: Option<PvclockInstant>,
    total_injected_ns: Arc<AtomicU64>,
    total_suspend_tsc_delta: u64,
    pvclock_shared_data: Option<PvclockSharedData>,
    mem: GuestMemory,
}
Expand description

Worker struct for the virtio-pvclock device.

Handles virtio requests, storing information about suspend/resume, adjusting the pvclock data in shared memory, and injecting suspend durations via config changes.

Fields§

§tsc_frequency: u64§suspend_time: Option<PvclockInstant>§total_injected_ns: Arc<AtomicU64>§total_suspend_tsc_delta: u64§pvclock_shared_data: Option<PvclockSharedData>§mem: GuestMemory

Implementations§

source§

impl PvClockWorker

source

pub fn new( tsc_frequency: u64, total_injected_ns: Arc<AtomicU64>, mem: GuestMemory ) -> Self

source

fn from_snapshot( tsc_frequency: u64, total_injected_ns: Arc<AtomicU64>, snap: PvClockWorkerSnapshot, mem: GuestMemory ) -> Self

source

fn set_pvclock_page(&mut self, addr: u64) -> Result<()>

Initialize the pvclock for initial boot. We assume that the systemtime of 0 corresponds to the tsc time of 0, so we do not set these. We set the tsc frequency based on the vcpu tsc frequency and we set PVCLOCK_TSC_STABLE_BIT in flags to tell the guest that it’s safe to use vcpu0’s pvclock page for use by the vdso. The order of writing the different fields doesn’t matter at this point, but does matter when updating.

source

pub fn suspend(&mut self)

source

pub fn resume(&mut self) -> Result<u64>

source

fn get_suspended_duration(suspend_time: &PvclockInstant) -> Duration

source

fn set_suspended_time(&mut self) -> Result<u64>

source

fn increment_pvclock_seqlock(&mut self) -> Result<()>

source

fn set_guest_stopped_bit(&mut self) -> Result<()>

Trait Implementations§

source§

impl From<PvClockWorker> for PvClockWorkerSnapshot

source§

fn from(worker: PvClockWorker) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for Twhere T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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, U> TryFrom<U> for Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V