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

[Xen-devel] [PATCH v2 05/13] iommu/arm: Re-define iommu_use_hap_pt(d) as iommu_hap_pt_share



From: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>

Not every integrated into ARM SoCs IOMMU can share page tables
with the CPU and as the result the iommu_use_hap_pt(d) mustn't
always be true.
Reuse x86's iommu_hap_pt_share flag to indicate whether the IOMMU
page table is shared or not.

As P2M table must always be shared between the CPU and the SMMU
print an error message and bail out if this flag was previously unset.

Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>
CC: Julien Grall <julien.grall@xxxxxxx>

---
   Changes in v1:
      -

   Changes in v2:
      - Bail out if iommu_hap_pt_share is unset instead of overriding it
      - Clarify comment in code
---
 xen/drivers/passthrough/arm/smmu.c | 6 ++++++
 xen/include/asm-arm/iommu.h        | 4 ++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/xen/drivers/passthrough/arm/smmu.c 
b/xen/drivers/passthrough/arm/smmu.c
index 7c313c0..e828308 100644
--- a/xen/drivers/passthrough/arm/smmu.c
+++ b/xen/drivers/passthrough/arm/smmu.c
@@ -2856,6 +2856,12 @@ static __init int arm_smmu_dt_init(struct dt_device_node 
*dev,
         */
        dt_device_set_used_by(dev, DOMID_XEN);
 
+       if (!iommu_hap_pt_share) {
+               dev_err(dt_to_dev(dev),
+                       "P2M table must always be shared between the CPU and 
the SMMU\n");
+               return -EINVAL;
+       }
+
        rc = arm_smmu_device_dt_probe(dev);
        if (rc)
                return rc;
diff --git a/xen/include/asm-arm/iommu.h b/xen/include/asm-arm/iommu.h
index 57d9b1e..2a6bd3d 100644
--- a/xen/include/asm-arm/iommu.h
+++ b/xen/include/asm-arm/iommu.h
@@ -20,8 +20,8 @@ struct arch_iommu
     void *priv;
 };
 
-/* Always share P2M Table between the CPU and the IOMMU */
-#define iommu_use_hap_pt(d) (1)
+/* Not every ARM SoCs IOMMU use the same page-table format as the CPU. */
+#define iommu_use_hap_pt(d) (iommu_hap_pt_share)
 
 const struct iommu_ops *iommu_get_ops(void);
 void __init iommu_set_ops(const struct iommu_ops *ops);
-- 
2.7.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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