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};
1111
1212use vmm_sys_util:: eventfd:: EventFd ;
1313
14- use super :: ActivateError ;
14+ use super :: { ActivateError , ResetError } ;
1515use super :: mmio:: { VIRTIO_MMIO_INT_CONFIG , VIRTIO_MMIO_INT_VRING } ;
1616use super :: queue:: { Queue , QueueError } ;
1717use 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.
Original file line number Diff line number Diff 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,
You can’t perform that action at this time.
0 commit comments