[Intel-gfx] [PATCH v3 4/6] drm/i915: Skip clflushes for all non-page backed objects
Chris Wilson
chris at chris-wilson.co.uk
Wed Feb 22 09:41:19 UTC 2017
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 at chris-wilson.co.uk>
Reviewed-by: Matthew Auld <matthew.auld at intel.com>
---
drivers/gpu/drm/i915/i915_gem.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 79ea585e82ac..2cf49b5c7594 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -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,
--
2.11.0
More information about the Intel-gfx
mailing list