|
@@ -41,6 +41,24 @@
|
|
|
|
|
|
#define LOOP_TIMEOUT 100000
|
|
|
|
|
|
+/*
|
|
|
+ * This bitmap is used to advertise the page sizes our hardware support
|
|
|
+ * to the IOMMU core, which will then use this information to split
|
|
|
+ * physically contiguous memory regions it is mapping into page sizes
|
|
|
+ * that we support.
|
|
|
+ *
|
|
|
+ * Traditionally the IOMMU core just handed us the mappings directly,
|
|
|
+ * after making sure the size is an order of a 4KiB page and that the
|
|
|
+ * mapping has natural alignment.
|
|
|
+ *
|
|
|
+ * To retain this behavior, we currently advertise that we support
|
|
|
+ * all page sizes that are an order of 4KiB.
|
|
|
+ *
|
|
|
+ * If at some point we'd like to utilize the IOMMU core's new behavior,
|
|
|
+ * we could change this to advertise the real page sizes we support.
|
|
|
+ */
|
|
|
+#define AMD_IOMMU_PGSIZES (~0xFFFUL)
|
|
|
+
|
|
|
static DEFINE_RWLOCK(amd_iommu_devtable_lock);
|
|
|
|
|
|
/* A list of preallocated protection domains */
|
|
@@ -2779,6 +2797,7 @@ static struct iommu_ops amd_iommu_ops = {
|
|
|
.unmap = amd_iommu_unmap,
|
|
|
.iova_to_phys = amd_iommu_iova_to_phys,
|
|
|
.domain_has_cap = amd_iommu_domain_has_cap,
|
|
|
+ .pgsize_bitmap = AMD_IOMMU_PGSIZES,
|
|
|
};
|
|
|
|
|
|
/*****************************************************************************
|