drm/i915: i915_gem_object_finish_gtt must always release gtt mmap
Even if the object is no longer in the GTT domain, there may still be a user space mapping which needs to be released. Without this fix, render-based text (mostly in firefox) would occasionally get corrupted when the system was under load. Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
2cd1176bd9
commit
b97c3d9c16
|
@ -2155,15 +2155,15 @@ static void i915_gem_object_finish_gtt(struct drm_i915_gem_object *obj)
|
||||||
{
|
{
|
||||||
u32 old_write_domain, old_read_domains;
|
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 */
|
/* Act a barrier for all accesses through the GTT */
|
||||||
mb();
|
mb();
|
||||||
|
|
||||||
/* Force a pagefault for domain tracking on next user access */
|
/* Force a pagefault for domain tracking on next user access */
|
||||||
i915_gem_release_mmap(obj);
|
i915_gem_release_mmap(obj);
|
||||||
|
|
||||||
|
if ((obj->base.read_domains & I915_GEM_DOMAIN_GTT) == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
old_read_domains = obj->base.read_domains;
|
old_read_domains = obj->base.read_domains;
|
||||||
old_write_domain = obj->base.write_domain;
|
old_write_domain = obj->base.write_domain;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue