diff options
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 10 |
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 | ||
| 245 | static void | 245 | static 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 | |||
| 263 | i915_gem_object_put_pages_phys(struct drm_i915_gem_object *obj, | 265 | i915_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 | ||
