From c5774c1b4cfba67eb264ee7e9f6339c1ddc7578c Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 13 Apr 2011 22:06:03 +0100 Subject: [PATCH] --- yaml --- r: 260159 b: refs/heads/master c: b5ffc9bc38a4766d586c3aca6830ed2bd6952e5b h: refs/heads/master i: 260157: 0960837a0423f688f977784ddf8262c2771968d3 260155: ea28cb1f4c274a6bee56b18419a6a98b14c8f4b4 260151: c84549db82b7de8861c06074250d5491fd06a4b5 260143: 35538aa11a4e5dc9882df03d70a99bfb5956ba29 260127: 603106329e2f87708186c54f0c08e169c1b0fe41 260095: f5fe194046ad5229416ae9287eaed57ac106ac24 v: v3 --- [refs] | 2 +- trunk/drivers/gpu/drm/i915/i915_gem.c | 27 +++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index d14f6878e77e..f820b6a769c1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a8198eea156df47e0e843ac5c7d4c8774e121c42 +refs/heads/master: b5ffc9bc38a4766d586c3aca6830ed2bd6952e5b diff --git a/trunk/drivers/gpu/drm/i915/i915_gem.c b/trunk/drivers/gpu/drm/i915/i915_gem.c index 6291dcdf5d40..e78a7ef634d9 100644 --- a/trunk/drivers/gpu/drm/i915/i915_gem.c +++ b/trunk/drivers/gpu/drm/i915/i915_gem.c @@ -2149,6 +2149,30 @@ i915_gem_object_wait_rendering(struct drm_i915_gem_object *obj) return 0; } +static void i915_gem_object_finish_gtt(struct drm_i915_gem_object *obj) +{ + u32 old_write_domain, old_read_domains; + + if ((obj->base.read_domains & I915_GEM_DOMAIN_GTT) == 0) + return; + + /* 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); + + old_read_domains = obj->base.read_domains; + old_write_domain = obj->base.write_domain; + + obj->base.read_domains &= ~I915_GEM_DOMAIN_GTT; + obj->base.write_domain &= ~I915_GEM_DOMAIN_GTT; + + trace_i915_gem_object_change_domain(obj, + old_read_domains, + old_write_domain); +} + /** * Unbinds an object from the GTT aperture. */ @@ -2173,8 +2197,7 @@ i915_gem_object_unbind(struct drm_i915_gem_object *obj) * cause memory corruption through use-after-free. */ - /* blow away mappings if mapped through GTT */ - i915_gem_release_mmap(obj); + i915_gem_object_finish_gtt(obj); /* Move the object to the CPU domain to ensure that * any possible CPU writes while it's not in the GTT