hw/arm/smmu-common: Fix devfn computation in smmu_iommu_mr
authorEric Auger <eric.auger@redhat.com>
Mon, 9 Jul 2018 13:51:34 +0000 (14:51 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Mon, 9 Jul 2018 13:51:34 +0000 (14:51 +0100)
smmu_iommu_mr() aims at returning the IOMMUMemoryRegion corresponding
to a given sid. The function extracts both the PCIe bus number and
the devfn to return this data. Current computation of devfn is wrong
as it only returns the PCIe function instead of slot | function.

Fixes 32cfd7f39e08 ("hw/arm/smmuv3: Cache/invalidate config data")

Signed-off-by: Eric Auger <eric.auger@redhat.com>
Message-id: 1530775623-32399-1-git-send-email-eric.auger@redhat.com
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
hw/arm/smmu-common.c
include/hw/arm/smmu-common.h

index 3098915d07c98e87f1386d7e26274fc252985cf0..55c75d65d2e44d2d2981482584f648c4728cd124 100644 (file)
@@ -351,7 +351,7 @@ IOMMUMemoryRegion *smmu_iommu_mr(SMMUState *s, uint32_t sid)
     bus_n = PCI_BUS_NUM(sid);
     smmu_bus = smmu_find_smmu_pcibus(s, bus_n);
     if (smmu_bus) {
-        devfn = sid & 0x7;
+        devfn = SMMU_PCI_DEVFN(sid);
         smmu = smmu_bus->pbdev[devfn];
         if (smmu) {
             return &smmu->iommu;
index 50e2912a95efd271b2c344ec10aeac3701f45338..b07cadd0ef9373f7d0994057d312ca9208b965dd 100644 (file)
@@ -24,6 +24,7 @@
 
 #define SMMU_PCI_BUS_MAX      256
 #define SMMU_PCI_DEVFN_MAX    256
+#define SMMU_PCI_DEVFN(sid)   (sid & 0xFF)
 
 #define SMMU_MAX_VA_BITS      48