diff --git a/virtio-devices/src/balloon.rs b/virtio-devices/src/balloon.rs index 7d9a71d8e..f683e440c 100644 --- a/virtio-devices/src/balloon.rs +++ b/virtio-devices/src/balloon.rs @@ -404,26 +404,7 @@ impl VirtioDevice for Balloon { mut queue_evts: Vec, ) -> ActivateResult { self.common.activate(&queues, &queue_evts, &interrupt_cb)?; - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; + let (kill_evt, pause_evt) = self.common.dup_eventfds(); let mut handler = BalloonEpollHandler { config: self.config.clone(), diff --git a/virtio-devices/src/block.rs b/virtio-devices/src/block.rs index ed30464ab..f755c57fb 100644 --- a/virtio-devices/src/block.rs +++ b/virtio-devices/src/block.rs @@ -554,26 +554,7 @@ impl VirtioDevice for Block { let queue_evt = queue_evts.remove(0); let queue = queues.remove(0); let queue_size = queue.size; - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; + let (kill_evt, pause_evt) = self.common.dup_eventfds(); let rate_limiter: Option = self .rate_limiter_config diff --git a/virtio-devices/src/console.rs b/virtio-devices/src/console.rs index 5a86db40b..ff0676ed5 100644 --- a/virtio-devices/src/console.rs +++ b/virtio-devices/src/console.rs @@ -402,26 +402,7 @@ impl VirtioDevice for Console { } } - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; + let (kill_evt, pause_evt) = self.common.dup_eventfds(); let mut handler = ConsoleEpollHandler { queues, diff --git a/virtio-devices/src/device.rs b/virtio-devices/src/device.rs index fa49e1aa3..eb8338848 100644 --- a/virtio-devices/src/device.rs +++ b/virtio-devices/src/device.rs @@ -319,6 +319,13 @@ impl VirtioCommon { // Return the interrupt Some(self.interrupt_cb.take().unwrap()) } + + pub fn dup_eventfds(&self) -> (EventFd, EventFd) { + ( + self.kill_evt.as_ref().unwrap().try_clone().unwrap(), + self.pause_evt.as_ref().unwrap().try_clone().unwrap(), + ) + } } impl Pausable for VirtioCommon { diff --git a/virtio-devices/src/iommu.rs b/virtio-devices/src/iommu.rs index de553a1f7..b77376814 100644 --- a/virtio-devices/src/iommu.rs +++ b/virtio-devices/src/iommu.rs @@ -911,26 +911,7 @@ impl VirtioDevice for Iommu { queue_evts: Vec, ) -> ActivateResult { self.common.activate(&queues, &queue_evts, &interrupt_cb)?; - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; + let (kill_evt, pause_evt) = self.common.dup_eventfds(); let mut handler = IommuEpollHandler { queues, mem, diff --git a/virtio-devices/src/mem.rs b/virtio-devices/src/mem.rs index d7b8794cc..b726b71e6 100644 --- a/virtio-devices/src/mem.rs +++ b/virtio-devices/src/mem.rs @@ -926,27 +926,7 @@ impl VirtioDevice for Mem { mut queue_evts: Vec, ) -> ActivateResult { self.common.activate(&queues, &queue_evts, &interrupt_cb)?; - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - + let (kill_evt, pause_evt) = self.common.dup_eventfds(); let config = self.config.lock().unwrap(); let mut handler = MemEpollHandler { host_addr: self.host_addr, diff --git a/virtio-devices/src/net.rs b/virtio-devices/src/net.rs index 262149f16..90d9bf515 100644 --- a/virtio-devices/src/net.rs +++ b/virtio-devices/src/net.rs @@ -544,27 +544,7 @@ impl VirtioDevice for Net { let cvq_queue = queues.remove(queue_num - 1); let cvq_queue_evt = queue_evts.remove(queue_num - 1); - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - + let (kill_evt, pause_evt) = self.common.dup_eventfds(); let mut ctrl_handler = NetCtrlEpollHandler { mem: mem.clone(), kill_evt, @@ -616,26 +596,7 @@ impl VirtioDevice for Net { let queue_evt_pair = vec![queue_evts.remove(0), queue_evts.remove(0)]; - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; + let (kill_evt, pause_evt) = self.common.dup_eventfds(); let rx_rate_limiter: Option = self .rate_limiter_config diff --git a/virtio-devices/src/pmem.rs b/virtio-devices/src/pmem.rs index 1e5c5926d..09d441862 100644 --- a/virtio-devices/src/pmem.rs +++ b/virtio-devices/src/pmem.rs @@ -370,26 +370,7 @@ impl VirtioDevice for Pmem { mut queue_evts: Vec, ) -> ActivateResult { self.common.activate(&queues, &queue_evts, &interrupt_cb)?; - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; + let (kill_evt, pause_evt) = self.common.dup_eventfds(); if let Some(disk) = self.disk.as_ref() { let disk = disk.try_clone().map_err(|e| { error!("failed cloning pmem disk: {}", e); diff --git a/virtio-devices/src/rng.rs b/virtio-devices/src/rng.rs index 6c773ec4c..9b01c3703 100644 --- a/virtio-devices/src/rng.rs +++ b/virtio-devices/src/rng.rs @@ -215,26 +215,7 @@ impl VirtioDevice for Rng { mut queue_evts: Vec, ) -> ActivateResult { self.common.activate(&queues, &queue_evts, &interrupt_cb)?; - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; + let (kill_evt, pause_evt) = self.common.dup_eventfds(); if let Some(file) = self.random_file.as_ref() { let random_file = file.try_clone().map_err(|e| { diff --git a/virtio-devices/src/vhost_user/fs.rs b/virtio-devices/src/vhost_user/fs.rs index c15b21d3e..e84baf87c 100644 --- a/virtio-devices/src/vhost_user/fs.rs +++ b/virtio-devices/src/vhost_user/fs.rs @@ -410,30 +410,9 @@ impl VirtioDevice for Fs { queue_evts: Vec, ) -> ActivateResult { self.common.activate(&queues, &queue_evts, &interrupt_cb)?; - + let (kill_evt, pause_evt) = self.common.dup_eventfds(); self.guest_memory = Some(mem.clone()); - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - setup_vhost_user( &mut self.vu, &mem.memory(), diff --git a/virtio-devices/src/vhost_user/net.rs b/virtio-devices/src/vhost_user/net.rs index ba0745a6a..678daab67 100644 --- a/virtio-devices/src/vhost_user/net.rs +++ b/virtio-devices/src/vhost_user/net.rs @@ -246,26 +246,7 @@ impl VirtioDevice for Net { let cvq_queue = queues.remove(num_queues - 1); let cvq_queue_evt = queue_evts.remove(num_queues - 1); - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; + let (kill_evt, pause_evt) = self.common.dup_eventfds(); let mut ctrl_handler = NetCtrlEpollHandler { mem: mem.clone(), @@ -322,26 +303,7 @@ impl VirtioDevice for Net { // Run a dedicated thread for handling potential reconnections with // the backend. - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; + let (kill_evt, pause_evt) = self.common.dup_eventfds(); let mut reconnect_handler = ReconnectEpollHandler { vu: self.vhost_user_net.clone(), diff --git a/virtio-devices/src/vsock/device.rs b/virtio-devices/src/vsock/device.rs index 0ec57e287..42ba18f34 100644 --- a/virtio-devices/src/vsock/device.rs +++ b/virtio-devices/src/vsock/device.rs @@ -418,26 +418,7 @@ where queue_evts: Vec, ) -> ActivateResult { self.common.activate(&queues, &queue_evts, &interrupt_cb)?; - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; + let (kill_evt, pause_evt) = self.common.dup_eventfds(); let mut handler = VsockEpollHandler { mem, diff --git a/virtio-devices/src/watchdog.rs b/virtio-devices/src/watchdog.rs index 34eb980a0..4bb37a681 100644 --- a/virtio-devices/src/watchdog.rs +++ b/virtio-devices/src/watchdog.rs @@ -290,26 +290,7 @@ impl VirtioDevice for Watchdog { mut queue_evts: Vec, ) -> ActivateResult { self.common.activate(&queues, &queue_evts, &interrupt_cb)?; - let kill_evt = self - .common - .kill_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("Failed to clone kill_evt eventfd: {}", e); - ActivateError::BadActivate - })?; - let pause_evt = self - .common - .pause_evt - .as_ref() - .unwrap() - .try_clone() - .map_err(|e| { - error!("Failed to clone pause_evt eventfd: {}", e); - ActivateError::BadActivate - })?; + let (kill_evt, pause_evt) = self.common.dup_eventfds(); let reset_evt = self.reset_evt.try_clone().map_err(|e| { error!("Failed to clone reset_evt eventfd: {}", e);