[vfio-users] intel_iommu=on and aacraid / Adaptec 3805
Alex Williamson
alex.williamson at redhat.com
Thu Jul 14 04:26:59 UTC 2016
On Wed, 13 Jul 2016 19:28:31 -0500
David <david283 at gmail.com> wrote:
> Ok, Rebooted when i got home and ran the Dmesg command again to save
> you a full copy. This time its full of errors....
> I have no idea what changed.
>
> But the errors are for a device address that has no hardware.
>
> I have attached the error log.
>
> # lspci -v -s 03:01.0
> **Nothing**
Ah yes, this begins to spark some memories:
commit d3d2ab43ddae5f958461ac0a9a2b484a68194df5
Author: Alex Williamson <alex.williamson at redhat.com>
Date: Tue Jan 13 11:26:50 2015 -0700
PCI: Add DMA alias quirk for Adaptec 3405
The Adaptec 3405 is actually an Intel 80333 I/O processor where the exposed
device at 0e.0 is actually the address translation unit of the I/O
processor and a hidden, private device at 01.0 masters the DMA for the
device. Create a fixed alias between the exposed and hidden devfn so we
can enable the IOMMU.
Scenarios like this are potentially likely for any device incorporating
this I/O processor, so this little bit of abstraction with the fixed alias
table should make future additions trivial.
Without this fix, booting a system with the Intel IOMMU enabled and an
Adaptec 3405 at 02:0e.0 results in a flood of errors like this:
dmar: DRHD: handling fault status reg 3
dmar: DMAR:[DMA Write] Request device [02:01.0] fault addr ffbff000
DMAR:[fault reason 02] Present bit in context entry is clear
[bhelgaas: changelog, comment]
Signed-off-by: Alex Williamson <alex.williamson at redhat.com>
Signed-off-by: Bjorn Helgaas <bhelgaas at google.com>
CC: Adaptec OEM Raid Solutions <aacraid at adaptec.com>
That went into kernel v4.0, but Adaptec never commented and we don't
know how widespread the problem is, so the fix only covers a specific
subsystem ID. If you're able to patch and build your own kernel, try
this:
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index ee72ebe..c5bd47d 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -3747,6 +3747,9 @@ static const struct pci_device_id fixed_dma_alias_tbl[] = {
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x0285,
PCI_VENDOR_ID_ADAPTEC2, 0x02bb), /* Adaptec 3405 */
.driver_data = PCI_DEVFN(1, 0) },
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x0285,
+ PCI_VENDOR_ID_ADAPTEC2, 0x02bc), /* Adaptec 3805 */
+ .driver_data = PCI_DEVFN(1, 0) },
{ 0 }
};
I'm grabbing the subsystem device ID from
http://pci-ids.ucw.cz/read/PC/9005/0285/900502bc Please verify with
'lspci -nnvs 3:0e.0' that your subsystem is 9005:02bc. Thanks,
Alex
More information about the vfio-users
mailing list