This field is only used when S390PCIBusDevice exists, so it can be moved
there to simplify S390PCIIOMMU which purpose is just to store the "root"
AddressSpace.
Signed-off-by: Konstantin Shkolnyy <kshk@linux.ibm.com>
---
hw/s390x/s390-pci-bus.c | 10 +++++-----
hw/s390x/s390-pci-inst.c | 23 +++++++++++------------
include/hw/s390x/s390-pci-bus.h | 2 +-
3 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
index 27ba3c801c..4a0b31b98b 100644
--- a/hw/s390x/s390-pci-bus.c
+++ b/hw/s390x/s390-pci-bus.c
@@ -609,8 +609,8 @@ static void s390_pci_ioat_replay(S390PCIBusDevice *pbdev)
return;
}
- if (iommu->dma_limit) {
- dma_avail = iommu->dma_limit->avail;
+ if (pbdev->dma_limit) {
+ dma_avail = pbdev->dma_limit->avail;
} else {
dma_avail = 1;
}
@@ -1210,7 +1210,7 @@ static void s390_pcihost_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
pbdev->forwarding_assist = false;
}
}
- pbdev->iommu->dma_limit = s390_pci_start_dma_count(s, pbdev);
+ pbdev->dma_limit = s390_pci_start_dma_count(s, pbdev);
/* Fill in CLP information passed via the vfio region */
s390_pci_get_clp_info(pbdev);
if (!pbdev->interp) {
@@ -1288,8 +1288,8 @@ static void s390_pcihost_unplug(HotplugHandler *hotplug_dev, DeviceState *dev,
pbdev->fid = 0;
QTAILQ_REMOVE(&s->zpci_devs, pbdev, link);
g_hash_table_remove(s->zpci_table, &pbdev->idx);
- if (pbdev->iommu && pbdev->iommu->dma_limit) {
- s390_pci_end_dma_count(s, pbdev->iommu->dma_limit);
+ if (pbdev->dma_limit) {
+ s390_pci_end_dma_count(s, pbdev->dma_limit);
}
g_hash_table_destroy(pbdev->iotlb);
qdev_unrealize(dev);
diff --git a/hw/s390x/s390-pci-inst.c b/hw/s390x/s390-pci-inst.c
index 4458eae681..ac4e7f412d 100644
--- a/hw/s390x/s390-pci-inst.c
+++ b/hw/s390x/s390-pci-inst.c
@@ -28,17 +28,17 @@
#include "trace.h"
-static inline void inc_dma_avail(S390PCIIOMMU *iommu)
+static inline void inc_dma_avail(S390PCIBusDevice *pbdev)
{
- if (iommu->dma_limit) {
- iommu->dma_limit->avail++;
+ if (pbdev->dma_limit) {
+ pbdev->dma_limit->avail++;
}
}
-static inline void dec_dma_avail(S390PCIIOMMU *iommu)
+static inline void dec_dma_avail(S390PCIBusDevice *pbdev)
{
- if (iommu->dma_limit) {
- iommu->dma_limit->avail--;
+ if (pbdev->dma_limit) {
+ pbdev->dma_limit->avail--;
}
}
@@ -616,7 +616,6 @@ int pcistg_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2, uintptr_t ra)
uint32_t s390_pci_update_iotlb(S390PCIBusDevice *pbdev,
S390IOTLBEntry *entry)
{
- S390PCIIOMMU *iommu = pbdev->iommu;
S390IOTLBEntry *cache = g_hash_table_lookup(pbdev->iotlb, &entry->iova);
IOMMUTLBEvent event = {
.type = entry->perm ? IOMMU_NOTIFIER_MAP : IOMMU_NOTIFIER_UNMAP,
@@ -634,7 +633,7 @@ uint32_t s390_pci_update_iotlb(S390PCIBusDevice *pbdev,
goto out;
}
g_hash_table_remove(pbdev->iotlb, &entry->iova);
- inc_dma_avail(iommu);
+ inc_dma_avail(pbdev);
/* Don't notify the iommu yet, maybe we can bundle contiguous unmaps */
goto out;
} else {
@@ -657,7 +656,7 @@ uint32_t s390_pci_update_iotlb(S390PCIBusDevice *pbdev,
cache->len = TARGET_PAGE_SIZE;
cache->perm = entry->perm;
g_hash_table_replace(pbdev->iotlb, &cache->iova, cache);
- dec_dma_avail(iommu);
+ dec_dma_avail(pbdev);
}
/*
@@ -667,7 +666,7 @@ uint32_t s390_pci_update_iotlb(S390PCIBusDevice *pbdev,
memory_region_notify_iommu(&pbdev->iommu_mr, 0, event);
out:
- return iommu->dma_limit ? iommu->dma_limit->avail : 1;
+ return pbdev->dma_limit ? pbdev->dma_limit->avail : 1;
}
static void s390_pci_batch_unmap(S390PCIBusDevice *pbdev, uint64_t iova,
@@ -744,8 +743,8 @@ int rpcit_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2, uintptr_t ra)
}
iommu = pbdev->iommu;
- if (iommu->dma_limit) {
- dma_avail = iommu->dma_limit->avail;
+ if (pbdev->dma_limit) {
+ dma_avail = pbdev->dma_limit->avail;
} else {
dma_avail = 1;
}
diff --git a/include/hw/s390x/s390-pci-bus.h b/include/hw/s390x/s390-pci-bus.h
index 24f6e60786..126a50c98b 100644
--- a/include/hw/s390x/s390-pci-bus.h
+++ b/include/hw/s390x/s390-pci-bus.h
@@ -279,7 +279,6 @@ struct S390PCIIOMMU {
uint64_t pba;
uint64_t pal;
uint64_t max_dma_limit;
- S390PCIDMACount *dma_limit;
};
typedef struct S390PCIIOMMUTable {
@@ -353,6 +352,7 @@ struct S390PCIBusDevice {
IOMMUMemoryRegion iommu_mr;
MemoryRegion *dm_mr;
GHashTable *iotlb;
+ S390PCIDMACount *dma_limit;
MemoryRegion msix_notify_mr;
IndAddr *summary_ind;
IndAddr *indicator;
--
2.34.1