Skip to content

Commit

Permalink
drm/i915: Skip clflushes for all non-page backed objects
Browse files Browse the repository at this point in the history
Generalise the skip for physical and stolen objects by skipping anything
we do not have a valid address for inside the sg.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170222114049.28456-4-chris@chris-wilson.co.uk
  • Loading branch information
Chris Wilson committed Feb 22, 2017
1 parent 5a97bcc commit f6aaba4
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions drivers/gpu/drm/i915/i915_gem.c
Original file line number Diff line number Diff line change
Expand Up @@ -3140,14 +3140,19 @@ void i915_gem_clflush_object(struct drm_i915_gem_object *obj,
* to GPU, and we can ignore the cache flush because it'll happen
* again at bind time.
*/
if (!obj->mm.pages)
if (!obj->mm.pages) {
GEM_BUG_ON(obj->base.write_domain != I915_GEM_DOMAIN_CPU);
return;
}

/*
* Stolen memory is always coherent with the GPU as it is explicitly
* marked as wc by the system, or the system is cache-coherent.
* Similarly, we only access struct pages through the CPU cache, so
* anything not backed by physical memory we consider to be always
* coherent and not need clflushing.
*/
if (obj->stolen || obj->phys_handle)
if (!i915_gem_object_has_struct_page(obj))
return;

/* If the GPU is snooping the contents of the CPU cache,
Expand Down

0 comments on commit f6aaba4

Please sign in to comment.