From 2d35d81aac2d63b6702bd4e9b7a9818fd91cba98 Mon Sep 17 00:00:00 2001 From: ShenYage Date: Wed, 21 May 2025 23:21:21 +0800 Subject: [PATCH] vfio-pci: fix a deadlock problem Signed-off-by: ShenYage (cherry picked from commit c104d9e95bc6d40a1534583a0cd9cde78d746d3a) --- 0007-vfio-pci-fix-a-deadlock-problem.patch | 37 ++++++++++++++++++++++ stratovirt.spec | 7 +++- 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 0007-vfio-pci-fix-a-deadlock-problem.patch diff --git a/0007-vfio-pci-fix-a-deadlock-problem.patch b/0007-vfio-pci-fix-a-deadlock-problem.patch new file mode 100644 index 0000000..89d9e2f --- /dev/null +++ b/0007-vfio-pci-fix-a-deadlock-problem.patch @@ -0,0 +1,37 @@ +From a399e1bf2e06b7268090c7f0b818689dcc42d794 Mon Sep 17 00:00:00 2001 +From: sujerry1991 +Date: Wed, 21 May 2025 15:33:51 +0800 +Subject: [PATCH] vfio-pci: fix a deadlock problem + +Fix c491725bbd "InterruptManager: Introduce the Interrupt Manager in Machine". + +Signed-off-by: Yan Wang +--- + vfio/src/vfio_pci.rs | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/vfio/src/vfio_pci.rs b/vfio/src/vfio_pci.rs +index d354098..87bb78f 100644 +--- a/vfio/src/vfio_pci.rs ++++ b/vfio/src/vfio_pci.rs +@@ -487,7 +487,6 @@ impl VfioPciDevice { + let parent_bus = self.base.parent_bus.clone(); + let dev_id = self.dev_id.clone(); + let devfn = self.base.devfn; +- let cloned_msix = msix.clone(); + let write = move |data: &[u8], _: GuestAddress, offset: u64| -> bool { + let mut locked_msix = msix.lock().unwrap(); + locked_msix.table[offset as usize..(offset as usize + data.len())] +@@ -516,8 +515,7 @@ impl VfioPciDevice { + gsi_route.irq_fd = Some(Arc::new(irq_fd)); + } + let irq_fd = gsi_route.irq_fd.clone(); +- let msi_irq_manager = &cloned_msix.lock().unwrap().msi_irq_manager; +- let irq_manager = msi_irq_manager.as_ref().unwrap(); ++ let irq_manager = &locked_msix.msi_irq_manager.as_ref().unwrap(); + if gsi_route.gsi == -1 { + gsi_route.gsi = match irq_manager.allocate_irq(msix_vector) { + Ok(g) => g as i32, +-- +2.33.0 + diff --git a/stratovirt.spec b/stratovirt.spec index 170dd28..c715b3c 100644 --- a/stratovirt.spec +++ b/stratovirt.spec @@ -6,7 +6,7 @@ Name: stratovirt Version: 2.4.0 -Release: 6 +Release: 7 Summary: StratoVirt is an opensource VMM(Virtual Machine Manager) which aims to perform next generation virtualization. License: MulanPSL-2.0 @@ -23,6 +23,8 @@ Patch005:0005-update-Rust-VMM-dependencies-and-re-vendor.patch Patch006:0006-introduce-riscv64-architecture-support.patch %endif +Patch007:0007-vfio-pci-fix-a-deadlock-problem.patch + ExclusiveArch: x86_64 aarch64 riscv64 Requires: pixman @@ -127,6 +129,9 @@ install -D -m555 ./target/%{rust_musl_target}/release/stratovirt %{buildroot}%{_ %endif %changelog +* Wed May 21 2025 shenyage 2.4.0-7 +- vfio-pci: fix a deadlock problem + * Fri Dec 20 2024 heruoqing 2.4.0-6 - Introduce riscv64 architecture support -- Gitee