[PATCH v2] drm/radeon/kms/blit: fix blit copy for very large buffers

Michel Dänzer michel at daenzer.net
Thu Feb 2 07:32:21 PST 2012


On Don, 2012-02-02 at 10:26 -0500, Ilija Hadzic wrote: 
> Evergreen and NI blit copy was broken if the buffer maps to a rectangle
> whose one dimension is 16384 (max dimension allowed by these chips).
> In the mainline kernel, the problem is exposed only when buffers are
> very large (1G), but it's still a problem. The problem could be exposed
> for smaller buffers if anyone modifies the algorithm for rectangle
> construction in r600_blit_create_rect() (the reason why someone would
> modify that algorithm is to tune the performance of buffer moves).
> 
> The root cause was in i2f() function which only operated on range between
> 0 and 16383. Fix this by extending the range of i2f() function to 0 to
> 32767.
> 
> While at it improve the function so that the range can be easily
> extended in the future (if it becomes necessary), cleanup lines
> over 80 characters, and replace in-line comments with one strategic
> comment that explains the crux of the function.
> 
> Credits to michel at daenzer.net for pointing out the root cause of
> the bug.
> 
> v2: Fix I2F_MAX_INPUT constant definition goof and warn only once
>     if input argument is out of range. Edit the comment a little
>     bit to avoid some linguistic confusion and make it look better
>     in general.
> 
> Signed-off-by: Ilija Hadzic <ihadzic at research.bell-labs.com>

Reviewed-by: Michel Dänzer <michel at daenzer.net>


-- 
Earthling Michel Dänzer           |                   http://www.amd.com
Libre software enthusiast         |          Debian, X and DRI developer


More information about the dri-devel mailing list