File tree Expand file tree Collapse file tree 2 files changed +11
-8
lines changed
src/vmm/src/devices/virtio Expand file tree Collapse file tree 2 files changed +11
-8
lines changed Original file line number Diff line number Diff line change @@ -11,7 +11,7 @@ use std::sync::atomic::{AtomicU32, Ordering};
11
11
12
12
use vmm_sys_util:: eventfd:: EventFd ;
13
13
14
- use super :: ActivateError ;
14
+ use super :: { ActivateError , ResetError } ;
15
15
use super :: mmio:: { VIRTIO_MMIO_INT_CONFIG , VIRTIO_MMIO_INT_VRING } ;
16
16
use super :: queue:: { Queue , QueueError } ;
17
17
use crate :: devices:: virtio:: AsAny ;
@@ -175,10 +175,9 @@ pub trait VirtioDevice: AsAny + Send {
175
175
/// Checks if the resources of this device are activated.
176
176
fn is_activated ( & self ) -> bool ;
177
177
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 )
182
181
}
183
182
184
183
/// Mark pages used by queues as dirty.
Original file line number Diff line number Diff line change @@ -204,8 +204,12 @@ impl MmioTransport {
204
204
let mut device_status = self . device_status ;
205
205
let reset_result = self . locked_device ( ) . reset ( ) ;
206
206
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) ;
209
213
device_status |= FAILED ;
210
214
}
211
215
}
@@ -471,7 +475,7 @@ pub(crate) mod tests {
471
475
let m = single_region_mem ( 0x1000 ) ;
472
476
let mut dummy = DummyDevice :: new ( ) ;
473
477
// Validate reset is no-op.
474
- assert ! ( dummy. reset( ) . is_none ( ) ) ;
478
+ assert ! ( dummy. reset( ) . is_err ( ) ) ;
475
479
let mut d = MmioTransport :: new ( m, Arc :: new ( Mutex :: new ( dummy) ) , false ) ;
476
480
477
481
// We just make sure here that the implementation of a mmio device behaves as we expect,
You can’t perform that action at this time.
0 commit comments