mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2025-01-10 22:57:43 +00:00
vmm: Implement Pausable trait for Vcpu
We want each Vcpu to store the vCPU state upon VM pausing. This is the reason why we need to explicitly implement the Pausable trait for the Vcpu structure. Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
parent
1741af74ed
commit
65132fb99d
@ -398,7 +398,15 @@ impl Vcpu {
|
||||
}
|
||||
|
||||
const VCPU_SNAPSHOT_ID: &str = "vcpu";
|
||||
impl Pausable for Vcpu {}
|
||||
impl Pausable for Vcpu {
|
||||
fn pause(&mut self) -> std::result::Result<(), MigratableError> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn resume(&mut self) -> std::result::Result<(), MigratableError> {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl Snapshottable for Vcpu {
|
||||
fn id(&self) -> String {
|
||||
VCPU_SNAPSHOT_ID.to_string()
|
||||
@ -1322,24 +1330,23 @@ impl Pausable for CpuManager {
|
||||
state.signal_thread();
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
for vcpu in self.vcpus.iter() {
|
||||
vcpu.lock()
|
||||
.unwrap()
|
||||
.fd
|
||||
.notify_guest_clock_paused()
|
||||
.map_err(|e| {
|
||||
MigratableError::Pause(anyhow!(
|
||||
"Could not notify guest it has been paused {:?}",
|
||||
e
|
||||
))
|
||||
})?;
|
||||
let mut vcpu = vcpu.lock().unwrap();
|
||||
vcpu.pause()?;
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
vcpu.fd.notify_guest_clock_paused().map_err(|e| {
|
||||
MigratableError::Pause(anyhow!("Could not notify guest it has been paused {:?}", e))
|
||||
})?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn resume(&mut self) -> std::result::Result<(), MigratableError> {
|
||||
for vcpu in self.vcpus.iter() {
|
||||
vcpu.lock().unwrap().resume()?;
|
||||
}
|
||||
|
||||
// Toggle the vCPUs pause boolean
|
||||
self.vcpus_pause_signalled.store(false, Ordering::SeqCst);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user