|
@@ -1802,7 +1802,14 @@ i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
|
|
|
gfp |= __GFP_NORETRY | __GFP_NOWARN | __GFP_NO_KSWAPD;
|
|
|
gfp &= ~(__GFP_IO | __GFP_WAIT);
|
|
|
}
|
|
|
-
|
|
|
+#ifdef CONFIG_SWIOTLB
|
|
|
+ if (swiotlb_nr_tbl()) {
|
|
|
+ st->nents++;
|
|
|
+ sg_set_page(sg, page, PAGE_SIZE, 0);
|
|
|
+ sg = sg_next(sg);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+#endif
|
|
|
if (!i || page_to_pfn(page) != last_pfn + 1) {
|
|
|
if (i)
|
|
|
sg = sg_next(sg);
|
|
@@ -1813,8 +1820,10 @@ i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
|
|
|
}
|
|
|
last_pfn = page_to_pfn(page);
|
|
|
}
|
|
|
-
|
|
|
- sg_mark_end(sg);
|
|
|
+#ifdef CONFIG_SWIOTLB
|
|
|
+ if (!swiotlb_nr_tbl())
|
|
|
+#endif
|
|
|
+ sg_mark_end(sg);
|
|
|
obj->pages = st;
|
|
|
|
|
|
if (i915_gem_object_needs_bit17_swizzle(obj))
|