Skip to content

Commit 4419bb8

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

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use std::sync::atomic::{AtomicU32, Ordering};
1111

1212
use vmm_sys_util::eventfd::EventFd;
1313

14-
use super::ActivateError;
14+
use super::{ActivateError, ResetError};
1515
use super::mmio::{VIRTIO_MMIO_INT_CONFIG, VIRTIO_MMIO_INT_VRING};
1616
use super::queue::{Queue, QueueError};
1717
use crate::devices::virtio::AsAny;
@@ -175,10 +175,9 @@ pub trait VirtioDevice: AsAny + Send {
175175
/// Checks if the resources of this device are activated.
176176
fn is_activated(&self) -> bool;
177177

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

184183
/// Mark pages used by queues as dirty.

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,8 +204,12 @@ impl MmioTransport {
204204
let mut device_status = self.device_status;
205205
let reset_result = self.locked_device().reset();
206206
match reset_result {
207-
Some((_interrupt_evt, mut _queue_evts)) => {}
208-
None => {
207+
Ok(_) => {
208+
// The device MUST initialize device status to 0 upon reset.
209+
device_status = INIT;
210+
}
211+
Err(e) => {
212+
warn!("failed to reset virtio device: {:?}", e);
209213
device_status |= FAILED;
210214
}
211215
}
@@ -471,7 +475,7 @@ pub(crate) mod tests {
471475
let m = single_region_mem(0x1000);
472476
let mut dummy = DummyDevice::new();
473477
// Validate reset is no-op.
474-
assert!(dummy.reset().is_none());
478+
assert!(dummy.reset().is_err());
475479
let mut d = MmioTransport::new(m, Arc::new(Mutex::new(dummy)), false);
476480

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

0 commit comments

Comments
 (0)