|
@@ -1328,6 +1328,15 @@ static void *arm_iommu_alloc_attrs(struct device *dev, size_t size,
|
|
|
if (gfp & GFP_ATOMIC)
|
|
|
return __iommu_alloc_atomic(dev, size, handle);
|
|
|
|
|
|
+ /*
|
|
|
+ * Following is a work-around (a.k.a. hack) to prevent pages
|
|
|
+ * with __GFP_COMP being passed to split_page() which cannot
|
|
|
+ * handle them. The real problem is that this flag probably
|
|
|
+ * should be 0 on ARM as it is not supported on this
|
|
|
+ * platform; see CONFIG_HUGETLBFS.
|
|
|
+ */
|
|
|
+ gfp &= ~(__GFP_COMP);
|
|
|
+
|
|
|
pages = __iommu_alloc_buffer(dev, size, gfp, attrs);
|
|
|
if (!pages)
|
|
|
return NULL;
|