016a62
From 324a0ffc5140c4ece5b720708da2c673a8d1b9cc Mon Sep 17 00:00:00 2001
016a62
From: Thomas Huth <thuth@redhat.com>
016a62
Date: Tue, 1 Oct 2019 06:02:58 +0100
016a62
Subject: [PATCH 12/22] s390: PCI: fix IOMMU region init
36a43f
016a62
RH-Author: Thomas Huth <thuth@redhat.com>
016a62
Message-id: <20191001060258.28206-2-thuth@redhat.com>
016a62
Patchwork-id: 90929
016a62
O-Subject: [RHEL-8.2.0/RHEL-8.1.z qemu-kvm PATCH 1/1] s390: PCI: fix IOMMU region init
016a62
Bugzilla: 1754643
016a62
RH-Acked-by: Jens Freimann <jfreimann@redhat.com>
36a43f
RH-Acked-by: David Hildenbrand <david@redhat.com>
36a43f
RH-Acked-by: Maxim Levitsky <mlevitsk@redhat.com>
36a43f
36a43f
From: Matthew Rosato <mjrosato@linux.ibm.com>
36a43f
36a43f
The fix in dbe9cf606c shrinks the IOMMU memory region to a size
36a43f
that seems reasonable on the surface, however is actually too
36a43f
small as it is based against a 0-mapped address space.  This
36a43f
causes breakage with small guests as they can overrun the IOMMU window.
36a43f
36a43f
Let's go back to the prior method of initializing iommu for now.
36a43f
36a43f
Fixes: dbe9cf606c ("s390x/pci: Set the iommu region size mpcifc request")
36a43f
Reviewed-by: Pierre Morel <pmorel@linux.ibm.com>
36a43f
Reported-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
36a43f
Tested-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
36a43f
Reported-by: Stefan Zimmerman <stzi@linux.ibm.com>
36a43f
Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com>
36a43f
Message-Id: <1569507036-15314-1-git-send-email-mjrosato@linux.ibm.com>
36a43f
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
36a43f
(cherry picked from commit 7df1dac5f1c85312474df9cb3a8fcae72303da62)
36a43f
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
36a43f
---
36a43f
 hw/s390x/s390-pci-bus.c | 7 ++++++-
36a43f
 1 file changed, 6 insertions(+), 1 deletion(-)
36a43f
36a43f
diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
36a43f
index 383b3e7..069e152 100644
36a43f
--- a/hw/s390x/s390-pci-bus.c
36a43f
+++ b/hw/s390x/s390-pci-bus.c
36a43f
@@ -691,10 +691,15 @@ static const MemoryRegionOps s390_msi_ctrl_ops = {
36a43f
 
36a43f
 void s390_pci_iommu_enable(S390PCIIOMMU *iommu)
36a43f
 {
36a43f
+    /*
36a43f
+     * The iommu region is initialized against a 0-mapped address space,
36a43f
+     * so the smallest IOMMU region we can define runs from 0 to the end
36a43f
+     * of the PCI address space.
36a43f
+     */
36a43f
     char *name = g_strdup_printf("iommu-s390-%04x", iommu->pbdev->uid);
36a43f
     memory_region_init_iommu(&iommu->iommu_mr, sizeof(iommu->iommu_mr),
36a43f
                              TYPE_S390_IOMMU_MEMORY_REGION, OBJECT(&iommu->mr),
36a43f
-                             name, iommu->pal - iommu->pba + 1);
36a43f
+                             name, iommu->pal + 1);
36a43f
     iommu->enabled = true;
36a43f
     memory_region_add_subregion(&iommu->mr, 0, MEMORY_REGION(&iommu->iommu_mr));
36a43f
     g_free(name);
36a43f
-- 
36a43f
1.8.3.1
36a43f