From 465a4ab416b2e5ad53b96702720331a44fffa2fe Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 12 Aug 2009 19:29:31 -0700 Subject: [PATCH] Align the height of untiled pixmaps to 2 lines as well. The 965 docs note, and it's probably the case on 915 as well, that the 2x2 subspans are read as a unit, even if the bottom row isn't used. If the address in that bottom row extended beyond the end of the GTT, a fault could occur. Thanks to Chris Wilson for pointing out the problem. --- src/i830_uxa.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/i830_uxa.c b/src/i830_uxa.c index bb1c6161..af43a416 100644 --- a/src/i830_uxa.c +++ b/src/i830_uxa.c @@ -613,14 +613,17 @@ i830_uxa_create_pixmap (ScreenPtr screen, int w, int h, int depth, unsigned usag pitch_align); if (tiling == I915_TILING_NONE) { - size = stride * h; + /* Round the height up so that the GPU's access to a 2x2 aligned + * subspan doesn't address an invalid page offset beyond the + * end of the GTT. + */ + size = stride * ALIGN(h, 2); } else { int aligned_h = h; if (tiling == I915_TILING_X) aligned_h = ALIGN(h, 8); else aligned_h = ALIGN(h, 32); - assert(aligned_h >= h); stride = i830_get_fence_pitch(i830, stride, tiling); /* Round the object up to the size of the fence it will live in