drm/i915: Only apply the mb() when flushing the GTT domain during a finish
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 9 Oct 2012 18:24:38 +0000 (19:24 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Sun, 20 Jan 2013 12:11:17 +0000 (13:11 +0100)
Now that we seem to have brought order to the GTT barriers, the last one
to review is the terminal barrier before we unbind the buffer from the
GTT. This needs to only be performed if the buffer still resides in the
GTT domain, and so we can skip some needless barriers otherwise.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem.c

index ce706555d0113a87f7a3ca5da08a690497b7ea86..5bb370fdc99cd8a4d9cd0d0a774c53b940f97c63 100644 (file)
@@ -2407,15 +2407,15 @@ static void i915_gem_object_finish_gtt(struct drm_i915_gem_object *obj)
 {
        u32 old_write_domain, old_read_domains;
 
-       /* Act a barrier for all accesses through the GTT */
-       mb();
-
        /* Force a pagefault for domain tracking on next user access */
        i915_gem_release_mmap(obj);
 
        if ((obj->base.read_domains & I915_GEM_DOMAIN_GTT) == 0)
                return;
 
+       /* Wait for any direct GTT access to complete */
+       mb();
+
        old_read_domains = obj->base.read_domains;
        old_write_domain = obj->base.write_domain;