mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
vm-device, vmm: Wait for barrier if one is returned
Wait for the barrier if one is provided by the result of the MMIO and PIO write. Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
+24
-8
@@ -400,11 +400,19 @@ impl VmmOps for VmOps {
|
||||
}
|
||||
|
||||
fn mmio_write(&self, addr: u64, data: &[u8]) -> hypervisor::vm::Result<()> {
|
||||
if let Err(e) = self.mmio_bus.write(addr, data) {
|
||||
if let vm_device::BusError::MissingAddressRange = e {
|
||||
warn!("Guest MMIO write to unregistered address 0x{:x}", addr);
|
||||
match self.mmio_bus.write(addr, data) {
|
||||
Err(e) => {
|
||||
if let vm_device::BusError::MissingAddressRange = e {
|
||||
warn!("Guest MMIO write to unregistered address 0x{:x}", addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(Some(barrier)) => {
|
||||
info!("Waiting for barrier");
|
||||
barrier.wait();
|
||||
info!("Barrier released");
|
||||
}
|
||||
_ => {}
|
||||
};
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -425,11 +433,19 @@ impl VmmOps for VmOps {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
if let Err(e) = self.io_bus.write(addr, data) {
|
||||
if let vm_device::BusError::MissingAddressRange = e {
|
||||
warn!("Guest PIO write to unregistered address 0x{:x}", addr);
|
||||
match self.io_bus.write(addr, data) {
|
||||
Err(e) => {
|
||||
if let vm_device::BusError::MissingAddressRange = e {
|
||||
warn!("Guest PIO write to unregistered address 0x{:x}", addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(Some(barrier)) => {
|
||||
info!("Waiting for barrier");
|
||||
barrier.wait();
|
||||
info!("Barrier released");
|
||||
}
|
||||
_ => {}
|
||||
};
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user