Skip to content

Commit 8f182ad

Browse files
committed
vmm: Refactor reset func to use ResetError
Signed-off-by: Adam Jensen <[email protected]>
1 parent 8e02dc1 commit 8f182ad

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

src/vmm/src/devices/virtio/device.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use utils::eventfd::EventFd;
1313

1414
use super::mmio::{VIRTIO_MMIO_INT_CONFIG, VIRTIO_MMIO_INT_VRING};
1515
use super::queue::Queue;
16-
use super::ActivateError;
16+
use super::{ActivateError, ResetError};
1717
use crate::devices::virtio::AsAny;
1818
use crate::logger::{error, warn};
1919
use crate::vstate::memory::GuestMemoryMmap;
@@ -174,10 +174,9 @@ pub trait VirtioDevice: AsAny + Send {
174174
/// Checks if the resources of this device are activated.
175175
fn is_activated(&self) -> bool;
176176

177-
/// Optionally deactivates this device and returns ownership of the guest memory map, interrupt
178-
/// event, and queue events.
179-
fn reset(&mut self) -> Option<(EventFd, Vec<EventFd>)> {
180-
None
177+
/// Optionally deactivates this device.
178+
fn reset(&mut self) -> Result<(), ResetError> {
179+
Err(ResetError::NotImplemented)
181180
}
182181
}
183182

src/vmm/src/devices/virtio/mmio.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,12 @@ impl MmioTransport {
201201
let mut device_status = self.device_status;
202202
let reset_result = self.locked_device().reset();
203203
match reset_result {
204-
Some((_interrupt_evt, mut _queue_evts)) => {}
205-
None => {
204+
Ok(_) => {
205+
// The device MUST initialize device status to 0 upon reset.
206+
device_status = INIT;
207+
}
208+
Err(e) => {
209+
warn!("failed to reset virtio device: {:?}", e);
206210
device_status |= FAILED;
207211
}
208212
}
@@ -469,7 +473,7 @@ pub(crate) mod tests {
469473
let m = single_region_mem(0x1000);
470474
let mut dummy = DummyDevice::new();
471475
// Validate reset is no-op.
472-
assert!(dummy.reset().is_none());
476+
assert!(dummy.reset().is_err());
473477
let mut d = MmioTransport::new(m, Arc::new(Mutex::new(dummy)), false);
474478

475479
// We just make sure here that the implementation of a mmio device behaves as we expect,

0 commit comments

Comments
 (0)