nv50: allocate an extra code bo to avoid dmesg spam
authorIlia Mirkin <imirkin@alum.mit.edu>
Mon, 13 Jan 2014 18:36:28 +0000 (13:36 -0500)
committerMaarten Lankhorst <maarten.lankhorst@canonical.com>
Mon, 27 Jan 2014 15:40:43 +0000 (16:40 +0100)
Each code BO is a heap that allocates at the end first, and so GPs are
allocated at the very end of the allocated space. When executing, we see
PAGE_NOT_PRESENT errors for the next page. Just over-allocate to make
sure that there's something there.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/nv50/nv50_screen.c

index b678cee473f4a28b2727da46797ba12d0d32b3c9..2e7b84d59113655bde045cf2f47e88e9d3f4bbde 100644 (file)
@@ -738,8 +738,12 @@ nv50_screen_create(struct nouveau_device *dev)
       goto fail;
    }
 
+   /* This over-allocates by a whole code BO. The GP, which would execute at
+    * the end of the last page, would trigger faults. The going theory is that
+    * it prefetches up to a certain amount. This avoids dmesg spam.
+    */
    ret = nouveau_bo_new(dev, NOUVEAU_BO_VRAM, 1 << 16,
-                        3 << NV50_CODE_BO_SIZE_LOG2, NULL, &screen->code);
+                        4 << NV50_CODE_BO_SIZE_LOG2, NULL, &screen->code);
    if (ret) {
       NOUVEAU_ERR("Failed to allocate code bo: %d\n", ret);
       goto fail;