Skip to content

Commit

Permalink
drm/i915: Zap mmaps of objects before unbinding them from the GTT.
Browse files Browse the repository at this point in the history
Otherwise, some other userland writing into its buffer may race to land
writes either after the CPU thinks it's got a coherent view, or after its
GTT entries have been redirected to point at the scratch page.  Either
result is unpleasant.

Signed-off-by: Eric Anholt <eric@anholt.net>
  • Loading branch information
Eric Anholt committed Sep 9, 2009
1 parent 7839c5d commit 5323fd0
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions drivers/gpu/drm/i915/i915_gem.c
Original file line number Diff line number Diff line change
Expand Up @@ -1915,6 +1915,12 @@ i915_gem_object_unbind(struct drm_gem_object *obj)
return -EINVAL;
}

/* blow away mappings if mapped through GTT */
i915_gem_release_mmap(obj);

if (obj_priv->fence_reg != I915_FENCE_REG_NONE)
i915_gem_clear_fence_reg(obj);

/* Move the object to the CPU domain to ensure that
* any possible CPU writes while it's not in the GTT
* are flushed when we go to remap it. This will
Expand All @@ -1928,20 +1934,14 @@ i915_gem_object_unbind(struct drm_gem_object *obj)
return ret;
}

BUG_ON(obj_priv->active);

if (obj_priv->agp_mem != NULL) {
drm_unbind_agp(obj_priv->agp_mem);
drm_free_agp(obj_priv->agp_mem, obj->size / PAGE_SIZE);
obj_priv->agp_mem = NULL;
}

BUG_ON(obj_priv->active);

/* blow away mappings if mapped through GTT */
i915_gem_release_mmap(obj);

if (obj_priv->fence_reg != I915_FENCE_REG_NONE)
i915_gem_clear_fence_reg(obj);

i915_gem_object_put_pages(obj);

if (obj_priv->gtt_space) {
Expand Down

0 comments on commit 5323fd0

Please sign in to comment.