Commit 9b2412f9 authored by Chris Wilson's avatar Chris Wilson Committed by Eric Anholt

drm/i915: First recheck for an empty fence register.

If we wait upon a request and successfully unbind a buffer occupying a
fence register, then that slot will be freed and cause a NULL derefrence
upon rescanning.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarEric Anholt <eric@anholt.net>
parent 040aefa2
...@@ -1580,6 +1580,7 @@ i915_gem_object_get_fence_reg(struct drm_gem_object *obj, bool write) ...@@ -1580,6 +1580,7 @@ i915_gem_object_get_fence_reg(struct drm_gem_object *obj, bool write)
} }
/* First try to find a free reg */ /* First try to find a free reg */
try_again:
for (i = dev_priv->fence_reg_start; i < dev_priv->num_fence_regs; i++) { for (i = dev_priv->fence_reg_start; i < dev_priv->num_fence_regs; i++) {
reg = &dev_priv->fence_regs[i]; reg = &dev_priv->fence_regs[i];
if (!reg->obj) if (!reg->obj)
...@@ -1591,7 +1592,6 @@ i915_gem_object_get_fence_reg(struct drm_gem_object *obj, bool write) ...@@ -1591,7 +1592,6 @@ i915_gem_object_get_fence_reg(struct drm_gem_object *obj, bool write)
struct drm_i915_gem_object *old_obj_priv = NULL; struct drm_i915_gem_object *old_obj_priv = NULL;
loff_t offset; loff_t offset;
try_again:
/* Could try to use LRU here instead... */ /* Could try to use LRU here instead... */
for (i = dev_priv->fence_reg_start; for (i = dev_priv->fence_reg_start;
i < dev_priv->num_fence_regs; i++) { i < dev_priv->num_fence_regs; i++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment