|
@@ -68,8 +68,16 @@ i915_gem_object_get_pages_internal(struct drm_i915_gem_object *obj)
|
|
|
|
|
|
max_order = MAX_ORDER;
|
|
|
#ifdef CONFIG_SWIOTLB
|
|
|
- if (swiotlb_nr_tbl()) /* minimum max swiotlb size is IO_TLB_SEGSIZE */
|
|
|
- max_order = min(max_order, ilog2(IO_TLB_SEGPAGES));
|
|
|
+ if (swiotlb_nr_tbl()) {
|
|
|
+ unsigned int max_segment;
|
|
|
+
|
|
|
+ max_segment = swiotlb_max_segment();
|
|
|
+ if (max_segment) {
|
|
|
+ max_segment = max_t(unsigned int, max_segment,
|
|
|
+ PAGE_SIZE) >> PAGE_SHIFT;
|
|
|
+ max_order = min(max_order, ilog2(max_segment));
|
|
|
+ }
|
|
|
+ }
|
|
|
#endif
|
|
|
|
|
|
gfp = GFP_KERNEL | __GFP_HIGHMEM | __GFP_RECLAIMABLE;
|