[Intel-gfx] [PATCH 5/5] drm/i915: fix gtt space allocated for tiled objects

Chris Wilson chris at chris-wilson.co.uk
Fri Jan 4 18:07:28 CET 2013


On Fri,  4 Jan 2013 18:42:00 +0200, Imre Deak <imre.deak at intel.com> wrote:
> The gtt space needed for tiled objects might be bigger than the linear
> size programmed into the correpsonding fence register. For example for
> the following buffer on a Gen5+ HW:
> 
> - allocation size: 4096 bytes
> - tiling mode: X tiled
> - stride: 1536
> 
> we need (1536 / 512) * 4096 bytes of gtt space to cover all the pixels
> in the buffer, but at the moment we allocate only 4096. This means that
> any buffer following this tiled buffer in the gtt space will be
> corrupted if pixels belonging to the 2nd and 3rd tiles are written.
> 
> Fix this by rounding up the size of the allocated gtt space to the next
> tile row address. The page frames beyond the allocation size will be
> backed by the single gtt scratch page used already elsewhere for similar
> padding.
> 
> Note that this is more of a security/robustness problem and not fixing any
> reported issue that I know of. This is because applications will normally
> access only the part of the buffer that is tile row size aligned.

There should not be any reported issues because all userspace already
allocates up to the end of tile-row and stride should be enforced to be
a multiple of tile-width. So the use of DIV_ROUND_UP implies a
programming error that should have been reported back to userspace
earlier. We can extend that by checking to make sure userspace has
allocated a valid buffer, that is, it has allocated sufficient pages for
the sampler access into the tiled buffer (or reject the set-tiling).
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre



More information about the Intel-gfx mailing list