[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] vt-d: Some fixes of Intel iommu



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1195911623 0
# Node ID b92239112869819849028a7f333ed439bf2c8bd4
# Parent  483329e219c97cd8317f751976ee495df5fdc883
vt-d: Some fixes of Intel iommu

This patch removes a wrong if condition judgement to setup rmrr
identify mapping for guests, and passes page count rather than address
size to iommu_flush_iotlb_psi().

Signed-off-by: Weidong Han <weidong.han@xxxxxxxxx>
Signed-off-by: Anthony Xu <Anthony.xu@xxxxxxxxx>
---
 xen/arch/x86/hvm/vmx/vtd/intel-iommu.c |   30 +++++++++++++++---------------
 1 files changed, 15 insertions(+), 15 deletions(-)

diff -r 483329e219c9 -r b92239112869 xen/arch/x86/hvm/vmx/vtd/intel-iommu.c
--- a/xen/arch/x86/hvm/vmx/vtd/intel-iommu.c    Sat Nov 24 13:39:13 2007 +0000
+++ b/xen/arch/x86/hvm/vmx/vtd/intel-iommu.c    Sat Nov 24 13:40:23 2007 +0000
@@ -1538,7 +1538,7 @@ int iommu_page_mapping(struct domain *do
     {
         iommu = drhd->iommu;
         if ( cap_caching_mode(iommu->cap) )
-            iommu_flush_iotlb_psi(iommu, domain->domain_id, iova, size, 0);
+            iommu_flush_iotlb_psi(iommu, domain->domain_id, iova, index, 0);
         else if ( cap_rwbf(iommu->cap) )
             iommu_flush_write_buffer(iommu);
     }
@@ -1726,13 +1726,11 @@ static void setup_dom0_rmrr(void)
 
     for_each_rmrr_device ( rmrr, pdev )
         ret = iommu_prepare_rmrr_dev(dom0, rmrr, pdev);
-
-    if ( ret )
-        gdprintk(XENLOG_ERR VTDPREFIX,
-                 "IOMMU: mapping reserved region failed\n");
-
+        if ( ret )
+            gdprintk(XENLOG_ERR VTDPREFIX,
+                     "IOMMU: mapping reserved region failed\n");
     end_for_each_rmrr_device ( rmrr, pdev )
-        }
+}
 
 int iommu_setup(void)
 {
@@ -1798,7 +1796,6 @@ int device_assigned(u8 bus, u8 devfn)
 
 int assign_device(struct domain *d, u8 bus, u8 devfn)
 {
-    struct hvm_iommu *hd  = domain_hvm_iommu(d);
     struct acpi_rmrr_unit *rmrr;
     struct pci_dev *pdev;
     int ret = 0;
@@ -1813,14 +1810,17 @@ int assign_device(struct domain *d, u8 b
     reassign_device_ownership(dom0, d, bus, devfn);
 
     /* setup rmrr identify mapping just once per domain */
-    if ( list_empty(&hd->pdev_list) )
-        for_each_rmrr_device(rmrr, pdev)
-            ret = iommu_prepare_rmrr_dev(d, rmrr, pdev);
-    if ( ret )
-        gdprintk(XENLOG_ERR VTDPREFIX,
-                 "IOMMU: mapping reserved region failed\n");
+    for_each_rmrr_device(rmrr, pdev)
+        ret = iommu_prepare_rmrr_dev(d, rmrr, pdev);
+        if ( ret )
+        {
+            gdprintk(XENLOG_ERR VTDPREFIX,
+                     "IOMMU: mapping reserved region failed\n");
+            return ret;
+        }
     end_for_each_rmrr_device(rmrr, pdev)
-        return ret;
+
+    return ret;
 }
 
 void iommu_set_pgd(struct domain *d)

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.