aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 4a31b7a891ec..30a1322c8677 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -244,14 +244,16 @@ err_phys:
244 244
245static void 245static void
246__i915_gem_object_release_shmem(struct drm_i915_gem_object *obj, 246__i915_gem_object_release_shmem(struct drm_i915_gem_object *obj,
247 struct sg_table *pages) 247 struct sg_table *pages,
248 bool needs_clflush)
248{ 249{
249 GEM_BUG_ON(obj->mm.madv == __I915_MADV_PURGED); 250 GEM_BUG_ON(obj->mm.madv == __I915_MADV_PURGED);
250 251
251 if (obj->mm.madv == I915_MADV_DONTNEED) 252 if (obj->mm.madv == I915_MADV_DONTNEED)
252 obj->mm.dirty = false; 253 obj->mm.dirty = false;
253 254
254 if ((obj->base.read_domains & I915_GEM_DOMAIN_CPU) == 0 && 255 if (needs_clflush &&
256 (obj->base.read_domains & I915_GEM_DOMAIN_CPU) == 0 &&
255 !cpu_cache_is_coherent(obj->base.dev, obj->cache_level)) 257 !cpu_cache_is_coherent(obj->base.dev, obj->cache_level))
256 drm_clflush_sg(pages); 258 drm_clflush_sg(pages);
257 259
@@ -263,7 +265,7 @@ static void
263i915_gem_object_put_pages_phys(struct drm_i915_gem_object *obj, 265i915_gem_object_put_pages_phys(struct drm_i915_gem_object *obj,
264 struct sg_table *pages) 266 struct sg_table *pages)
265{ 267{
266 __i915_gem_object_release_shmem(obj, pages); 268 __i915_gem_object_release_shmem(obj, pages, false);
267 269
268 if (obj->mm.dirty) { 270 if (obj->mm.dirty) {
269 struct address_space *mapping = obj->base.filp->f_mapping; 271 struct address_space *mapping = obj->base.filp->f_mapping;
@@ -2231,7 +2233,7 @@ i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj,
2231 struct sgt_iter sgt_iter; 2233 struct sgt_iter sgt_iter;
2232 struct page *page; 2234 struct page *page;
2233 2235
2234 __i915_gem_object_release_shmem(obj, pages); 2236 __i915_gem_object_release_shmem(obj, pages, true);
2235 2237
2236 i915_gem_gtt_finish_pages(obj, pages); 2238 i915_gem_gtt_finish_pages(obj, pages);
2237 2239