drm/nouveau: Keep RAMIN heap within the channel.
authorYounes Manton <[email protected]>
Tue, 22 Nov 2011 19:58:31 +0000 (14:58 -0500)
committerBen Skeggs <[email protected]>
Wed, 30 Nov 2011 13:40:52 +0000 (23:40 +1000)
The entire RAMIN is allocated to be 'size', but the heap is
specified as 'base' + 'size' inside RAMIN, so it will overflow
past RAMIN by 'base' bytes on NV50+ and clobber other allocatons
unless it's size is adjusted.

Signed-off-by: Younes Manton <[email protected]>
Signed-off-by: Ben Skeggs <[email protected]>
drivers/gpu/drm/nouveau/nouveau_object.c

index 02222c540aee1a38f963dd13eeda7f0f7c7e8844..960c0ae0c0c3de650dac30beaec208b9bfd3558d 100644 (file)
@@ -680,7 +680,7 @@ nouveau_gpuobj_channel_init_pramin(struct nouveau_channel *chan)
                return ret;
        }
 
-       ret = drm_mm_init(&chan->ramin_heap, base, size);
+       ret = drm_mm_init(&chan->ramin_heap, base, size - base);
        if (ret) {
                NV_ERROR(dev, "Error creating PRAMIN heap: %d\n", ret);
                nouveau_gpuobj_ref(NULL, &chan->ramin);