From 81eca69b409d32afd7e8ac9ec98aa91c9f185aa6 Mon Sep 17 00:00:00 2001 From: Arvind Vasudev Date: Mon, 13 Jan 2025 09:24:51 -0800 Subject: [PATCH] pci: Adding support for printing the device's address on a DMA map and unmap errors Signed-off-by: Arvind Vasudev --- pci/src/vfio.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/pci/src/vfio.rs b/pci/src/vfio.rs index 77f8c3183..e358f9457 100644 --- a/pci/src/vfio.rs +++ b/pci/src/vfio.rs @@ -48,10 +48,10 @@ pub(crate) const VFIO_COMMON_ID: &str = "vfio_common"; pub enum VfioPciError { #[error("Failed to create user memory region: {0}")] CreateUserMemoryRegion(#[source] HypervisorVmError), - #[error("Failed to DMA map: {0}")] - DmaMap(#[source] vfio_ioctls::VfioError), - #[error("Failed to DMA unmap: {0}")] - DmaUnmap(#[source] vfio_ioctls::VfioError), + #[error("Failed to DMA map: {0} for device {1}")] + DmaMap(#[source] vfio_ioctls::VfioError, PciBdf), + #[error("Failed to DMA unmap: {0} for device {1}")] + DmaUnmap(#[source] vfio_ioctls::VfioError, PciBdf), #[error("Failed to enable INTx: {0}")] EnableIntx(#[source] VfioError), #[error("Failed to enable MSI: {0}")] @@ -1410,6 +1410,7 @@ pub struct VfioPciDevice { common: VfioCommon, iommu_attached: bool, memory_slot_allocator: MemorySlotAllocator, + bdf: PciBdf, } impl VfioPciDevice { @@ -1451,6 +1452,7 @@ impl VfioPciDevice { common, iommu_attached, memory_slot_allocator, + bdf, }; Ok(vfio_pci_device) @@ -1656,7 +1658,7 @@ impl VfioPciDevice { user_memory_region.size, user_memory_region.host_addr, ) - .map_err(VfioPciError::DmaMap)?; + .map_err(|e| VfioPciError::DmaMap(e, self.bdf))?; } } } @@ -1717,7 +1719,7 @@ impl VfioPciDevice { if !self.iommu_attached { self.container .vfio_dma_map(iova, size, user_addr) - .map_err(VfioPciError::DmaMap)?; + .map_err(|e| VfioPciError::DmaMap(e, self.bdf))?; } Ok(()) @@ -1727,7 +1729,7 @@ impl VfioPciDevice { if !self.iommu_attached { self.container .vfio_dma_unmap(iova, size) - .map_err(VfioPciError::DmaUnmap)?; + .map_err(|e| VfioPciError::DmaUnmap(e, self.bdf))?; } Ok(())