diff options
author | Daniel Verkamp <dverkamp@chromium.org> | 2019-11-01 10:01:23 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-11-18 07:43:03 +0000 |
commit | 24eeed2b6fb6306f404238d1343db4b55aa9beef (patch) | |
tree | 0a347754994d470b3df3e3811430b4da6758ea17 | |
parent | e7c46cad4150ecb18a0832a61042522974543938 (diff) | |
download | crosvm-24eeed2b6fb6306f404238d1343db4b55aa9beef.tar crosvm-24eeed2b6fb6306f404238d1343db4b55aa9beef.tar.gz crosvm-24eeed2b6fb6306f404238d1343db4b55aa9beef.tar.bz2 crosvm-24eeed2b6fb6306f404238d1343db4b55aa9beef.tar.lz crosvm-24eeed2b6fb6306f404238d1343db4b55aa9beef.tar.xz crosvm-24eeed2b6fb6306f404238d1343db4b55aa9beef.tar.zst crosvm-24eeed2b6fb6306f404238d1343db4b55aa9beef.zip |
devices: virtio: pass Interrupt to activate()
Factor out the common creation of struct Interrupt. No functional change. BUG=chromium:854765 TEST=./build_test Change-Id: Idf8804771ba1af5181818f643e15e1b42918258a Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1898268 Tested-by: kokoro <noreply+kokoro@google.com>
-rw-r--r-- | devices/src/virtio/balloon.rs | 14 | ||||
-rw-r--r-- | devices/src/virtio/block.rs | 14 | ||||
-rw-r--r-- | devices/src/virtio/fs/mod.rs | 15 | ||||
-rw-r--r-- | devices/src/virtio/gpu/mod.rs | 17 | ||||
-rw-r--r-- | devices/src/virtio/input/mod.rs | 17 | ||||
-rw-r--r-- | devices/src/virtio/net.rs | 16 | ||||
-rw-r--r-- | devices/src/virtio/p9.rs | 16 | ||||
-rw-r--r-- | devices/src/virtio/pmem.rs | 17 | ||||
-rw-r--r-- | devices/src/virtio/rng.rs | 17 | ||||
-rw-r--r-- | devices/src/virtio/tpm.rs | 16 | ||||
-rw-r--r-- | devices/src/virtio/vhost/net.rs | 28 | ||||
-rw-r--r-- | devices/src/virtio/vhost/vsock.rs | 16 | ||||
-rw-r--r-- | devices/src/virtio/vhost/worker.rs | 16 | ||||
-rw-r--r-- | devices/src/virtio/virtio_device.rs | 10 | ||||
-rw-r--r-- | devices/src/virtio/virtio_pci_common_config.rs | 9 | ||||
-rw-r--r-- | devices/src/virtio/virtio_pci_device.rs | 10 | ||||
-rw-r--r-- | devices/src/virtio/wl.rs | 26 | ||||
-rw-r--r-- | fuzz/block_fuzzer.rs | 12 |
18 files changed, 58 insertions, 228 deletions
diff --git a/devices/src/virtio/balloon.rs b/devices/src/virtio/balloon.rs index c93d60b..2d50c3d 100644 --- a/devices/src/virtio/balloon.rs +++ b/devices/src/virtio/balloon.rs @@ -8,9 +8,7 @@ use std::os::unix::io::{AsRawFd, RawFd}; use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::Arc; use std::thread; -use sync::Mutex; -use crate::pci::MsixConfig; use data_model::{DataInit, Le32}; use msg_socket::MsgReceiver; use sys_util::{ @@ -320,10 +318,7 @@ impl VirtioDevice for Balloon { fn activate( &mut self, mem: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - status: Arc<AtomicUsize>, + interrupt: Interrupt, mut queues: Vec<Queue>, queue_evts: Vec<EventFd>, ) { @@ -346,12 +341,7 @@ impl VirtioDevice for Balloon { .name("virtio_balloon".to_string()) .spawn(move || { let mut worker = Worker { - interrupt: Interrupt::new( - status, - interrupt_evt, - interrupt_resample_evt, - msix_config, - ), + interrupt, mem, inflate_queue: queues.remove(0), deflate_queue: queues.remove(0), diff --git a/devices/src/virtio/block.rs b/devices/src/virtio/block.rs index e3e5247..477a9de 100644 --- a/devices/src/virtio/block.rs +++ b/devices/src/virtio/block.rs @@ -8,13 +8,11 @@ use std::io::{self, Seek, SeekFrom, Write}; use std::mem::size_of; use std::os::unix::io::{AsRawFd, RawFd}; use std::result; -use std::sync::atomic::AtomicUsize; use std::sync::Arc; use std::thread; use std::time::Duration; use std::u32; -use crate::pci::MsixConfig; use data_model::{DataInit, Le16, Le32, Le64}; use disk::DiskFile; use msg_socket::{MsgReceiver, MsgSender}; @@ -723,10 +721,7 @@ impl VirtioDevice for Block { fn activate( &mut self, mem: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - status: Arc<AtomicUsize>, + interrupt: Interrupt, queues: Vec<Queue>, mut queue_evts: Vec<EventFd>, ) { @@ -752,12 +747,7 @@ impl VirtioDevice for Block { .name("virtio_blk".to_string()) .spawn(move || { let mut worker = Worker { - interrupt: Interrupt::new( - status, - interrupt_evt, - interrupt_resample_evt, - msix_config, - ), + interrupt, queues, mem, disk_image, diff --git a/devices/src/virtio/fs/mod.rs b/devices/src/virtio/fs/mod.rs index 5e8ac41..ce7739a 100644 --- a/devices/src/virtio/fs/mod.rs +++ b/devices/src/virtio/fs/mod.rs @@ -7,15 +7,12 @@ use std::fmt; use std::io; use std::mem; use std::os::unix::io::RawFd; -use std::sync::atomic::AtomicUsize; use std::sync::Arc; use std::thread; use data_model::{DataInit, Le32}; -use sync::Mutex; use sys_util::{error, warn, Error as SysError, EventFd, GuestMemory}; -use crate::pci::MsixConfig; use crate::virtio::{ copy_config, DescriptorError, Interrupt, Queue, VirtioDevice, TYPE_FS, VIRTIO_F_VERSION_1, }; @@ -226,10 +223,7 @@ impl VirtioDevice for Fs { fn activate( &mut self, guest_mem: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - status: Arc<AtomicUsize>, + interrupt: Interrupt, queues: Vec<Queue>, queue_evts: Vec<EventFd>, ) { @@ -240,12 +234,7 @@ impl VirtioDevice for Fs { let fs = self.fs.take().expect("missing file system implementation"); let server = Arc::new(Server::new(fs)); - let irq = Arc::new(Interrupt::new( - status, - interrupt_evt, - interrupt_resample_evt, - msix_config, - )); + let irq = Arc::new(interrupt); for (idx, (queue, evt)) in queues.into_iter().zip(queue_evts.into_iter()).enumerate() { let (self_kill_evt, kill_evt) = diff --git a/devices/src/virtio/gpu/mod.rs b/devices/src/virtio/gpu/mod.rs index 210f815..c9cd5cc 100644 --- a/devices/src/virtio/gpu/mod.rs +++ b/devices/src/virtio/gpu/mod.rs @@ -14,11 +14,8 @@ use std::num::NonZeroU8; use std::os::unix::io::{AsRawFd, RawFd}; use std::path::PathBuf; use std::rc::Rc; -use std::sync::atomic::AtomicUsize; -use std::sync::Arc; use std::thread; use std::time::Duration; -use sync::Mutex; use data_model::*; @@ -38,7 +35,7 @@ use super::{ use self::backend::Backend; use self::protocol::*; -use crate::pci::{MsixConfig, PciBarConfiguration, PciBarPrefetchable, PciBarRegionType}; +use crate::pci::{PciBarConfiguration, PciBarPrefetchable, PciBarRegionType}; use vm_control::VmMemoryControlRequestSocket; @@ -822,10 +819,7 @@ impl VirtioDevice for Gpu { fn activate( &mut self, mem: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - interrupt_status: Arc<AtomicUsize>, + interrupt: Interrupt, mut queues: Vec<Queue>, mut queue_evts: Vec<EventFd>, ) { @@ -871,12 +865,7 @@ impl VirtioDevice for Gpu { }; Worker { - interrupt: Interrupt::new( - interrupt_status, - interrupt_evt, - interrupt_resample_evt, - msix_config, - ), + interrupt, exit_evt, mem, ctrl_queue, diff --git a/devices/src/virtio/input/mod.rs b/devices/src/virtio/input/mod.rs index 664f121..2490c52 100644 --- a/devices/src/virtio/input/mod.rs +++ b/devices/src/virtio/input/mod.rs @@ -25,12 +25,7 @@ use std::fmt::{self, Display}; use std::io::Read; use std::io::Write; use std::mem::size_of; -use std::sync::atomic::AtomicUsize; -use std::sync::Arc; use std::thread; -use sync::Mutex; - -use crate::pci::MsixConfig; const EVENT_QUEUE_SIZE: u16 = 64; const STATUS_QUEUE_SIZE: u16 = 64; @@ -607,10 +602,7 @@ where fn activate( &mut self, mem: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - status: Arc<AtomicUsize>, + interrupt: Interrupt, mut queues: Vec<Queue>, mut queue_evts: Vec<EventFd>, ) { @@ -639,12 +631,7 @@ where .name(String::from("virtio_input")) .spawn(move || { let mut worker = Worker { - interrupt: Interrupt::new( - status, - interrupt_evt, - interrupt_resample_evt, - msix_config, - ), + interrupt, event_source: source, event_queue, status_queue, diff --git a/devices/src/virtio/net.rs b/devices/src/virtio/net.rs index 5c95e06..a2b1058 100644 --- a/devices/src/virtio/net.rs +++ b/devices/src/virtio/net.rs @@ -8,12 +8,8 @@ use std::mem; use std::net::Ipv4Addr; use std::os::unix::io::{AsRawFd, RawFd}; use std::result; -use std::sync::atomic::AtomicUsize; -use std::sync::Arc; use std::thread; -use sync::Mutex; -use crate::pci::MsixConfig; use net_sys; use net_util::{Error as TapError, MacAddress, TapT}; use sys_util::Error as SysError; @@ -435,10 +431,7 @@ where fn activate( &mut self, mem: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - status: Arc<AtomicUsize>, + interrupt: Interrupt, mut queues: Vec<Queue>, mut queue_evts: Vec<EventFd>, ) { @@ -458,12 +451,7 @@ where let rx_queue = queues.remove(0); let tx_queue = queues.remove(0); let mut worker = Worker { - interrupt: Interrupt::new( - status, - interrupt_evt, - interrupt_resample_evt, - msix_config, - ), + interrupt, mem, rx_queue, tx_queue, diff --git a/devices/src/virtio/p9.rs b/devices/src/virtio/p9.rs index d891d22..5e483c3 100644 --- a/devices/src/virtio/p9.rs +++ b/devices/src/virtio/p9.rs @@ -8,12 +8,8 @@ use std::mem; use std::os::unix::io::RawFd; use std::path::{Path, PathBuf}; use std::result; -use std::sync::atomic::AtomicUsize; -use std::sync::Arc; use std::thread; -use sync::Mutex; -use crate::pci::MsixConfig; use p9; use sys_util::{error, warn, Error as SysError, EventFd, GuestMemory, PollContext, PollToken}; use virtio_sys::vhost::VIRTIO_F_VERSION_1; @@ -227,10 +223,7 @@ impl VirtioDevice for P9 { fn activate( &mut self, guest_mem: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - status: Arc<AtomicUsize>, + interrupt: Interrupt, mut queues: Vec<Queue>, mut queue_evts: Vec<EventFd>, ) { @@ -253,12 +246,7 @@ impl VirtioDevice for P9 { .name("virtio_9p".to_string()) .spawn(move || { let mut worker = Worker { - interrupt: Interrupt::new( - status, - interrupt_evt, - interrupt_resample_evt, - msix_config, - ), + interrupt, mem: guest_mem, queue: queues.remove(0), server, diff --git a/devices/src/virtio/pmem.rs b/devices/src/virtio/pmem.rs index 07ed137..931b037 100644 --- a/devices/src/virtio/pmem.rs +++ b/devices/src/virtio/pmem.rs @@ -6,18 +6,13 @@ use std::fmt::{self, Display}; use std::fs::File; use std::io; use std::os::unix::io::{AsRawFd, RawFd}; -use std::sync::atomic::AtomicUsize; -use std::sync::Arc; use std::thread; -use sync::Mutex; use sys_util::Result as SysResult; use sys_util::{error, EventFd, GuestAddress, GuestMemory, PollContext, PollToken}; use data_model::{DataInit, Le32, Le64}; -use crate::pci::MsixConfig; - use super::{ copy_config, DescriptorChain, DescriptorError, Interrupt, Queue, Reader, VirtioDevice, Writer, TYPE_PMEM, VIRTIO_F_VERSION_1, @@ -268,10 +263,7 @@ impl VirtioDevice for Pmem { fn activate( &mut self, memory: GuestMemory, - interrupt_event: EventFd, - interrupt_resample_event: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - status: Arc<AtomicUsize>, + interrupt: Interrupt, mut queues: Vec<Queue>, mut queue_events: Vec<EventFd>, ) { @@ -297,12 +289,7 @@ impl VirtioDevice for Pmem { .name("virtio_pmem".to_string()) .spawn(move || { let mut worker = Worker { - interrupt: Interrupt::new( - status, - interrupt_event, - interrupt_resample_event, - msix_config, - ), + interrupt, memory, disk_image, queue, diff --git a/devices/src/virtio/rng.rs b/devices/src/virtio/rng.rs index 9fa2e59..a7fc3d7 100644 --- a/devices/src/virtio/rng.rs +++ b/devices/src/virtio/rng.rs @@ -7,17 +7,12 @@ use std::fmt::{self, Display}; use std::fs::File; use std::io; use std::os::unix::io::{AsRawFd, RawFd}; -use std::sync::atomic::AtomicUsize; -use std::sync::Arc; use std::thread; -use sync::Mutex; use sys_util::{error, warn, EventFd, GuestMemory, PollContext, PollToken}; use super::{Interrupt, Queue, VirtioDevice, Writer, TYPE_RNG}; -use crate::pci::MsixConfig; - const QUEUE_SIZE: u16 = 256; const QUEUE_SIZES: &[u16] = &[QUEUE_SIZE]; @@ -177,10 +172,7 @@ impl VirtioDevice for Rng { fn activate( &mut self, mem: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - status: Arc<AtomicUsize>, + interrupt: Interrupt, mut queues: Vec<Queue>, mut queue_evts: Vec<EventFd>, ) { @@ -205,12 +197,7 @@ impl VirtioDevice for Rng { .name("virtio_rng".to_string()) .spawn(move || { let mut worker = Worker { - interrupt: Interrupt::new( - status, - interrupt_evt, - interrupt_resample_evt, - msix_config, - ), + interrupt, queue, mem, random_file, diff --git a/devices/src/virtio/tpm.rs b/devices/src/virtio/tpm.rs index abad4e2..95f7092 100644 --- a/devices/src/virtio/tpm.rs +++ b/devices/src/virtio/tpm.rs @@ -9,12 +9,8 @@ use std::io::{self, Read, Write}; use std::ops::BitOrAssign; use std::os::unix::io::RawFd; use std::path::PathBuf; -use std::sync::atomic::AtomicUsize; -use std::sync::Arc; use std::thread; -use crate::pci::MsixConfig; -use sync::Mutex; use sys_util::{error, EventFd, GuestMemory, PollContext, PollToken}; use tpm2; @@ -204,10 +200,7 @@ impl VirtioDevice for Tpm { fn activate( &mut self, mem: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - interrupt_status: Arc<AtomicUsize>, + interrupt: Interrupt, mut queues: Vec<Queue>, mut queue_evts: Vec<EventFd>, ) { @@ -237,12 +230,7 @@ impl VirtioDevice for Tpm { self.kill_evt = Some(self_kill_evt); let worker = Worker { - interrupt: Interrupt::new( - interrupt_status, - interrupt_evt, - interrupt_resample_evt, - msix_config, - ), + interrupt, queue, mem, queue_evt, diff --git a/devices/src/virtio/vhost/net.rs b/devices/src/virtio/vhost/net.rs index c07623d..1196200 100644 --- a/devices/src/virtio/vhost/net.rs +++ b/devices/src/virtio/vhost/net.rs @@ -5,10 +5,7 @@ use std::mem; use std::net::Ipv4Addr; use std::os::unix::io::{AsRawFd, RawFd}; -use std::sync::atomic::AtomicUsize; -use std::sync::Arc; use std::thread; -use sync::Mutex; use net_sys; use net_util::{MacAddress, TapT}; @@ -19,8 +16,7 @@ use virtio_sys::virtio_net; use super::worker::Worker; use super::{Error, Result}; -use crate::pci::MsixConfig; -use crate::virtio::{Queue, VirtioDevice, TYPE_NET}; +use crate::virtio::{Interrupt, Queue, VirtioDevice, TYPE_NET}; const QUEUE_SIZE: u16 = 256; const NUM_QUEUES: usize = 2; @@ -179,10 +175,7 @@ where fn activate( &mut self, _: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - status: Arc<AtomicUsize>, + interrupt: Interrupt, queues: Vec<Queue>, queue_evts: Vec<EventFd>, ) { @@ -203,10 +196,7 @@ where queues, vhost_net_handle, vhost_interrupt, - status, - interrupt_evt, - interrupt_resample_evt, - msix_config, + interrupt, acked_features, ); let activate_vqs = |handle: &U| -> Result<()> { @@ -245,6 +235,8 @@ pub mod tests { use super::*; use net_util::fakes::FakeTap; use std::result; + use std::sync::atomic::AtomicUsize; + use std::sync::Arc; use sys_util::{GuestAddress, GuestMemory, GuestMemoryError}; use vhost::net::fakes::FakeNet; @@ -298,10 +290,12 @@ pub mod tests { // Just testing that we don't panic, for now net.activate( guest_memory, - EventFd::new().unwrap(), - EventFd::new().unwrap(), - None, - Arc::new(AtomicUsize::new(0)), + Interrupt::new( + Arc::new(AtomicUsize::new(0)), + EventFd::new().unwrap(), + EventFd::new().unwrap(), + None, + ), vec![Queue::new(1)], vec![EventFd::new().unwrap()], ); diff --git a/devices/src/virtio/vhost/vsock.rs b/devices/src/virtio/vhost/vsock.rs index 6dc0fbb..ed95b8b 100644 --- a/devices/src/virtio/vhost/vsock.rs +++ b/devices/src/virtio/vhost/vsock.rs @@ -3,10 +3,7 @@ // found in the LICENSE file. use std::os::unix::io::{AsRawFd, RawFd}; -use std::sync::atomic::AtomicUsize; -use std::sync::Arc; use std::thread; -use sync::Mutex; use data_model::{DataInit, Le64}; @@ -15,8 +12,7 @@ use vhost::Vsock as VhostVsockHandle; use super::worker::Worker; use super::{Error, Result}; -use crate::pci::MsixConfig; -use crate::virtio::{copy_config, Queue, VirtioDevice, TYPE_VSOCK}; +use crate::virtio::{copy_config, Interrupt, Queue, VirtioDevice, TYPE_VSOCK}; const QUEUE_SIZE: u16 = 256; const NUM_QUEUES: usize = 3; @@ -146,10 +142,7 @@ impl VirtioDevice for Vsock { fn activate( &mut self, _: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - status: Arc<AtomicUsize>, + interrupt: Interrupt, queues: Vec<Queue>, queue_evts: Vec<EventFd>, ) { @@ -173,10 +166,7 @@ impl VirtioDevice for Vsock { vhost_queues, vhost_handle, interrupts, - status, - interrupt_evt, - interrupt_resample_evt, - msix_config, + interrupt, acked_features, ); let activate_vqs = |handle: &VhostVsockHandle| -> Result<()> { diff --git a/devices/src/virtio/vhost/worker.rs b/devices/src/virtio/vhost/worker.rs index e88b929..21aabfd 100644 --- a/devices/src/virtio/vhost/worker.rs +++ b/devices/src/virtio/vhost/worker.rs @@ -3,15 +3,11 @@ // found in the LICENSE file. use std::os::raw::c_ulonglong; -use std::sync::atomic::AtomicUsize; -use std::sync::Arc; -use sync::Mutex; use sys_util::{EventFd, PollContext, PollToken}; use vhost::Vhost; use super::{Error, Result}; -use crate::pci::MsixConfig; use crate::virtio::{Interrupt, Queue}; /// Worker that takes care of running the vhost device. This mainly involves forwarding interrupts @@ -31,19 +27,11 @@ impl<T: Vhost> Worker<T> { queues: Vec<Queue>, vhost_handle: T, vhost_interrupt: Vec<EventFd>, - interrupt_status: Arc<AtomicUsize>, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, + interrupt: Interrupt, acked_features: u64, ) -> Worker<T> { Worker { - interrupt: Interrupt::new( - interrupt_status, - interrupt_evt, - interrupt_resample_evt, - msix_config, - ), + interrupt, queues, vhost_handle, vhost_interrupt, diff --git a/devices/src/virtio/virtio_device.rs b/devices/src/virtio/virtio_device.rs index de4e24c..281e098 100644 --- a/devices/src/virtio/virtio_device.rs +++ b/devices/src/virtio/virtio_device.rs @@ -3,14 +3,11 @@ // found in the LICENSE file. use std::os::unix::io::RawFd; -use std::sync::atomic::AtomicUsize; -use std::sync::Arc; -use sync::Mutex; use sys_util::{EventFd, GuestMemory}; use super::*; -use crate::pci::{MsixConfig, PciBarConfiguration, PciCapability}; +use crate::pci::{PciBarConfiguration, PciCapability}; /// Trait for virtio devices to be driven by a virtio transport. /// @@ -69,10 +66,7 @@ pub trait VirtioDevice: Send { fn activate( &mut self, mem: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - status: Arc<AtomicUsize>, + interrupt: Interrupt, queues: Vec<Queue>, queue_evts: Vec<EventFd>, ); diff --git a/devices/src/virtio/virtio_pci_common_config.rs b/devices/src/virtio/virtio_pci_common_config.rs index d1ea3e8..78af4ff 100644 --- a/devices/src/virtio/virtio_pci_common_config.rs +++ b/devices/src/virtio/virtio_pci_common_config.rs @@ -238,11 +238,7 @@ impl VirtioPciCommonConfig { mod tests { use super::*; - use crate::pci::MsixConfig; use std::os::unix::io::RawFd; - use std::sync::atomic::AtomicUsize; - use std::sync::Arc; - use sync::Mutex; use sys_util::{EventFd, GuestMemory}; struct DummyDevice(u32); @@ -262,10 +258,7 @@ mod tests { fn activate( &mut self, _mem: GuestMemory, - _interrupt_evt: EventFd, - _interrupt_resample_evt: EventFd, - _msix_config: Option<Arc<Mutex<MsixConfig>>>, - _status: Arc<AtomicUsize>, + _interrupt: Interrupt, _queues: Vec<Queue>, _queue_evts: Vec<EventFd>, ) { diff --git a/devices/src/virtio/virtio_pci_device.rs b/devices/src/virtio/virtio_pci_device.rs index 43b3a74..c535ab5 100644 --- a/devices/src/virtio/virtio_pci_device.rs +++ b/devices/src/virtio/virtio_pci_device.rs @@ -613,12 +613,16 @@ impl PciDevice for VirtioPciDevice { None }; - self.device.activate( - mem, + let interrupt = Interrupt::new( + self.interrupt_status.clone(), interrupt_evt, interrupt_resample_evt, msix_config, - self.interrupt_status.clone(), + ); + + self.device.activate( + mem, + interrupt, self.queues.clone(), self.queue_evts.split_off(0), ); diff --git a/devices/src/virtio/wl.rs b/devices/src/virtio/wl.rs index 81732a2..d8b9bae 100644 --- a/devices/src/virtio/wl.rs +++ b/devices/src/virtio/wl.rs @@ -44,11 +44,8 @@ use std::os::unix::net::UnixStream; use std::path::{Path, PathBuf}; use std::rc::Rc; use std::result; -use std::sync::atomic::AtomicUsize; -use std::sync::Arc; use std::thread; use std::time::Duration; -use sync::Mutex; #[cfg(feature = "wl-dmabuf")] use libc::{dup, EBADF, EINVAL}; @@ -73,7 +70,6 @@ use super::resource_bridge::*; use super::{ DescriptorChain, Interrupt, Queue, Reader, VirtioDevice, Writer, TYPE_WL, VIRTIO_F_VERSION_1, }; -use crate::pci::MsixConfig; use vm_control::{MaybeOwnedFd, VmMemoryControlRequestSocket, VmMemoryRequest, VmMemoryResponse}; const VIRTWL_SEND_MAX_ALLOCS: usize = 28; @@ -1333,10 +1329,7 @@ struct Worker { impl Worker { fn new( mem: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - interrupt_status: Arc<AtomicUsize>, - msix_config: Option<Arc<Mutex<MsixConfig>>>, + interrupt: Interrupt, in_queue: Queue, out_queue: Queue, wayland_path: PathBuf, @@ -1345,12 +1338,7 @@ impl Worker { resource_bridge: Option<ResourceRequestSocket>, ) -> Worker { Worker { - interrupt: Interrupt::new( - interrupt_status, - interrupt_evt, - interrupt_resample_evt, - msix_config, - ), + interrupt, mem, in_queue, out_queue, @@ -1597,10 +1585,7 @@ impl VirtioDevice for Wl { fn activate( &mut self, mem: GuestMemory, - interrupt_evt: EventFd, - interrupt_resample_evt: EventFd, - msix_config: Option<Arc<Mutex<MsixConfig>>>, - status: Arc<AtomicUsize>, + interrupt: Interrupt, mut queues: Vec<Queue>, queue_evts: Vec<EventFd>, ) { @@ -1627,10 +1612,7 @@ impl VirtioDevice for Wl { .spawn(move || { Worker::new( mem, - interrupt_evt, - interrupt_resample_evt, - status, - msix_config, + interrupt, queues.remove(0), queues.remove(0), wayland_path, diff --git a/fuzz/block_fuzzer.rs b/fuzz/block_fuzzer.rs index b1bc003..1730d49 100644 --- a/fuzz/block_fuzzer.rs +++ b/fuzz/block_fuzzer.rs @@ -12,7 +12,7 @@ use std::sync::atomic::AtomicUsize; use std::sync::Arc; use cros_fuzz::fuzz_target; -use devices::virtio::{Block, Queue, VirtioDevice}; +use devices::virtio::{Block, Interrupt, Queue, VirtioDevice}; use sys_util::{EventFd, GuestAddress, GuestMemory, SharedMemory}; const MEM_SIZE: u64 = 256 * 1024 * 1024; @@ -84,10 +84,12 @@ fuzz_target!(|bytes| { block.activate( mem, - EventFd::new().unwrap(), - EventFd::new().unwrap(), - None, // msix_config - Arc::new(AtomicUsize::new(0)), + Interrupt::new( + Arc::new(AtomicUsize::new(0)), + EventFd::new().unwrap(), + EventFd::new().unwrap(), + None, // msix_config + ), vec![q], queue_evts, ); |