mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-05 21:15:45 +00:00
hypervisor: Add ability to get dirty logged pages
Return a bitmap of pages that have been dirtied (written to) since it was last called. Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
parent
8baa244ec1
commit
041724a7cf
@ -369,6 +369,14 @@ impl vm::Vm for KvmVm {
|
|||||||
self.vmmops.store(Some(Arc::new(vmmops)));
|
self.vmmops.store(Some(Arc::new(vmmops)));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
///
|
||||||
|
/// Get dirty pages bitmap (one bit per page)
|
||||||
|
///
|
||||||
|
fn get_dirty_log(&self, slot: u32, memory_size: u64) -> vm::Result<Vec<u64>> {
|
||||||
|
self.fd
|
||||||
|
.get_dirty_log(slot, memory_size as usize)
|
||||||
|
.map_err(|e| vm::HypervisorVmError::GetDirtyLog(e.into()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/// Wrapper over KVM system ioctls.
|
/// Wrapper over KVM system ioctls.
|
||||||
pub struct KvmHypervisor {
|
pub struct KvmHypervisor {
|
||||||
|
@ -147,6 +147,11 @@ pub enum HypervisorVmError {
|
|||||||
///
|
///
|
||||||
#[error("Failed to write to IO Bus: {0}")]
|
#[error("Failed to write to IO Bus: {0}")]
|
||||||
IoBusWrite(#[source] anyhow::Error),
|
IoBusWrite(#[source] anyhow::Error),
|
||||||
|
///
|
||||||
|
/// Get dirty log error
|
||||||
|
///
|
||||||
|
#[error("Failed to get dirty log: {0}")]
|
||||||
|
GetDirtyLog(#[source] anyhow::Error),
|
||||||
}
|
}
|
||||||
///
|
///
|
||||||
/// Result type for returning from a function
|
/// Result type for returning from a function
|
||||||
@ -217,6 +222,8 @@ pub trait Vm: Send + Sync {
|
|||||||
fn set_state(&self, state: VmState) -> Result<()>;
|
fn set_state(&self, state: VmState) -> Result<()>;
|
||||||
/// Set VmmOps interface
|
/// Set VmmOps interface
|
||||||
fn set_vmmops(&self, vmmops: Box<dyn VmmOps>) -> Result<()>;
|
fn set_vmmops(&self, vmmops: Box<dyn VmmOps>) -> Result<()>;
|
||||||
|
/// Get dirty pages bitmap
|
||||||
|
fn get_dirty_log(&self, slot: u32, memory_size: u64) -> Result<Vec<u64>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait VmmOps: Send + Sync {
|
pub trait VmmOps: Send + Sync {
|
||||||
|
Loading…
Reference in New Issue
Block a user