From ae4525a2cf9978b61000ca5f4cc301e23e1429a7 Mon Sep 17 00:00:00 2001 From: erfrimod Date: Mon, 14 Oct 2024 15:32:39 -0700 Subject: [PATCH 1/2] Implement Drop for vfrio_sys Device, unmapping msix for interrupts. --- Cargo.lock | 1 + vm/devices/user_driver/vfio_sys/Cargo.toml | 3 +++ vm/devices/user_driver/vfio_sys/src/lib.rs | 12 ++++++++++++ 3 files changed, 16 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 6a7782ff1f..bca744829b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6949,6 +6949,7 @@ dependencies = [ "bitfield-struct", "libc", "nix 0.26.4", + "pal_event", "tracing", "vfio-bindings", ] diff --git a/vm/devices/user_driver/vfio_sys/Cargo.toml b/vm/devices/user_driver/vfio_sys/Cargo.toml index b70c8a307a..faead5ffaa 100644 --- a/vm/devices/user_driver/vfio_sys/Cargo.toml +++ b/vm/devices/user_driver/vfio_sys/Cargo.toml @@ -12,5 +12,8 @@ nix = { workspace = true, features = ["ioctl"] } tracing.workspace = true vfio-bindings.workspace = true +[target.'cfg(target_os = "linux")'.dependencies] +pal_event.workspace = true + [lints] workspace = true diff --git a/vm/devices/user_driver/vfio_sys/src/lib.rs b/vm/devices/user_driver/vfio_sys/src/lib.rs index e80d50d64e..f5fb3243b3 100644 --- a/vm/devices/user_driver/vfio_sys/src/lib.rs +++ b/vm/devices/user_driver/vfio_sys/src/lib.rs @@ -12,6 +12,7 @@ use std::fs; use std::fs::File; use std::io::BufRead; use std::io::BufReader; +use std::iter; use std::os::unix::prelude::*; use std::path::Path; use vfio_bindings::bindings::vfio::vfio_device_info; @@ -392,6 +393,17 @@ impl AsFd for Device { } } +impl Drop for Device { + fn drop(&mut self) { + match self.map_msix(0, iter::empty::()) { + Ok(_) => (), + Err(e) => { + tracing::error!("vfio_sys::Device::drop error calling map_msix: {:?}", e); + } + } + } +} + /// Find the Linux irq number for the MSI-X `index` of the PCI device `pci_id`. pub fn find_msix_irq(pci_id: &str, index: u32) -> anyhow::Result { let buffered = BufReader::new(File::open("/proc/interrupts")?); From 2febbfbc7ac49d943be4ed0722c985ef1467d243 Mon Sep 17 00:00:00 2001 From: erfrimod Date: Mon, 14 Oct 2024 16:09:01 -0700 Subject: [PATCH 2/2] Clippy fix Cargo.toml --- vm/devices/user_driver/vfio_sys/Cargo.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/vm/devices/user_driver/vfio_sys/Cargo.toml b/vm/devices/user_driver/vfio_sys/Cargo.toml index faead5ffaa..eb19f45eb5 100644 --- a/vm/devices/user_driver/vfio_sys/Cargo.toml +++ b/vm/devices/user_driver/vfio_sys/Cargo.toml @@ -11,8 +11,6 @@ libc.workspace = true nix = { workspace = true, features = ["ioctl"] } tracing.workspace = true vfio-bindings.workspace = true - -[target.'cfg(target_os = "linux")'.dependencies] pal_event.workspace = true [lints]