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>
if (INTEL_INFO(obj->dev)->gen >= 4)
return true;
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.
/*
* Previous chips need to be aligned to the size of the smallest
* fence register that can contain the object.
while (size < obj_priv->base.size)
size <<= 1;
while (size < obj_priv->base.size)
size <<= 1;
- if (obj_priv->gtt_offset & (size - 1))
+ if (obj_priv->gtt_space->size != size)
- 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;