radeon: fix allocation
authorMathias Fröhlich <Mathias.Froehlich@gmx.net>
Tue, 3 Nov 2009 16:41:26 +0000 (11:41 -0500)
committerAlex Deucher <alexdeucher@gmail.com>
Tue, 3 Nov 2009 16:41:26 +0000 (11:41 -0500)
The old code increments the command stream size by another kbyte, but does
not make sure that the requested packet size fits into the stream. The patch
ensures that the whole next packet fits there and rounds the allocated size to
a power of two.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
libdrm/radeon/radeon_cs_gem.c

index e42ec48..232ea7f 100644 (file)
@@ -226,7 +226,8 @@ static int cs_gem_begin(struct radeon_cs *cs,
     if (cs->cdw + ndw > cs->ndw) {
         uint32_t tmp, *ptr;
 
-        tmp = (cs->ndw + 1 + 0x3FF) & (~0x3FF);
+       /* round up the required size to a multiple of 1024 */
+        tmp = (cs->cdw + ndw + 0x3FF) & (~0x3FF);
         ptr = (uint32_t*)realloc(cs->packets, 4 * tmp);
         if (ptr == NULL) {
             return -ENOMEM;