Skip to content

Commit

Permalink
drm/i915: Fix current tiling check for relaxed fencing
Browse files Browse the repository at this point in the history
As we may bind an object with the correct alignment, but with an invalid
size, it may pass the current checks on whether the object may be reused
with a fence.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
  • Loading branch information
Chris Wilson committed Nov 15, 2010
1 parent 5e78330 commit df15315
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions drivers/gpu/drm/i915/i915_gem_tiling.c
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,17 @@ i915_gem_object_fence_ok(struct drm_gem_object *obj, int tiling_mode)
if (INTEL_INFO(obj->dev)->gen >= 4)
return true;

if (!obj_priv->gtt_space)
return true;

if (INTEL_INFO(obj->dev)->gen == 3) {
if (obj_priv->gtt_offset & ~I915_FENCE_START_MASK)
return false;
} else {
if (obj_priv->gtt_offset & ~I830_FENCE_START_MASK)
return false;
}

/*
* Previous chips need to be aligned to the size of the smallest
* fence register that can contain the object.
Expand All @@ -257,16 +268,11 @@ i915_gem_object_fence_ok(struct drm_gem_object *obj, int tiling_mode)
while (size < obj_priv->base.size)
size <<= 1;

if (obj_priv->gtt_offset & (size - 1))
if (obj_priv->gtt_space->size != size)
return false;

if (INTEL_INFO(obj->dev)->gen == 3) {
if (obj_priv->gtt_offset & ~I915_FENCE_START_MASK)
return false;
} else {
if (obj_priv->gtt_offset & ~I830_FENCE_START_MASK)
return false;
}
if (obj_priv->gtt_offset & (size - 1))
return false;

return true;
}
Expand Down

0 comments on commit df15315

Please sign in to comment.