diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2009-02-11 09:26:44 -0500 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2009-03-10 23:22:24 -0400 |
commit | 9b2412f9ad0a3913baa40c270d6e1fa3c6d50067 (patch) | |
tree | 88f0382840856fc1d58aa12bcbfb2d1ec8eb7ae0 /drivers/gpu/drm/i915/i915_gem.c | |
parent | 040aefa263aa9cd7bd5df50586c35e1e15e77f84 (diff) |
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: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index c94069b28a47..6497c1ad02d3 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -1580,6 +1580,7 @@ i915_gem_object_get_fence_reg(struct drm_gem_object *obj, bool write) | |||
1580 | } | 1580 | } |
1581 | 1581 | ||
1582 | /* First try to find a free reg */ | 1582 | /* First try to find a free reg */ |
1583 | try_again: | ||
1583 | for (i = dev_priv->fence_reg_start; i < dev_priv->num_fence_regs; i++) { | 1584 | for (i = dev_priv->fence_reg_start; i < dev_priv->num_fence_regs; i++) { |
1584 | reg = &dev_priv->fence_regs[i]; | 1585 | reg = &dev_priv->fence_regs[i]; |
1585 | if (!reg->obj) | 1586 | if (!reg->obj) |
@@ -1591,7 +1592,6 @@ i915_gem_object_get_fence_reg(struct drm_gem_object *obj, bool write) | |||
1591 | struct drm_i915_gem_object *old_obj_priv = NULL; | 1592 | struct drm_i915_gem_object *old_obj_priv = NULL; |
1592 | loff_t offset; | 1593 | loff_t offset; |
1593 | 1594 | ||
1594 | try_again: | ||
1595 | /* Could try to use LRU here instead... */ | 1595 | /* Could try to use LRU here instead... */ |
1596 | for (i = dev_priv->fence_reg_start; | 1596 | for (i = dev_priv->fence_reg_start; |
1597 | i < dev_priv->num_fence_regs; i++) { | 1597 | i < dev_priv->num_fence_regs; i++) { |