45 lines
1.5 KiB
Diff
45 lines
1.5 KiB
Diff
|
From 891517f5111cd82909906d5e8ee0299db0d46762 Mon Sep 17 00:00:00 2001
|
||
|
From: Ben Skeggs <bskeggs@redhat.com>
|
||
|
Date: Mon, 7 Jan 2013 13:07:13 +1000
|
||
|
Subject: [PATCH] nouveau: disallow pushbuf BOs in multiple memory types
|
||
|
|
||
|
Under certain circumstances it's possible for libdrm to decide to move
|
||
|
a GART|VRAM pushbuf to be VRAM-only. This causes the kernel to reject
|
||
|
the command submission on GF8 and up, due to a stricter policy where
|
||
|
buffers are only allowed to move to memory types that were specified
|
||
|
at creation time.
|
||
|
|
||
|
The simplest fix for this is to force the creation-time memory type for
|
||
|
the lifetime of the push buffer.
|
||
|
|
||
|
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
|
||
|
---
|
||
|
nouveau/pushbuf.c | 8 ++++----
|
||
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/nouveau/pushbuf.c b/nouveau/pushbuf.c
|
||
|
index 0e37ce3..ff8e125 100644
|
||
|
--- a/nouveau/pushbuf.c
|
||
|
+++ b/nouveau/pushbuf.c
|
||
|
@@ -574,13 +574,13 @@ nouveau_pushbuf_new(struct nouveau_client *client, struct nouveau_object *chan,
|
||
|
push->client = client;
|
||
|
push->channel = immediate ? chan : NULL;
|
||
|
push->flags = NOUVEAU_BO_RD;
|
||
|
- if (fifo->pushbuf & NOUVEAU_GEM_DOMAIN_VRAM) {
|
||
|
- push->flags |= NOUVEAU_BO_VRAM;
|
||
|
- nvpb->type = NOUVEAU_BO_VRAM;
|
||
|
- }
|
||
|
if (fifo->pushbuf & NOUVEAU_GEM_DOMAIN_GART) {
|
||
|
push->flags |= NOUVEAU_BO_GART;
|
||
|
nvpb->type = NOUVEAU_BO_GART;
|
||
|
+ } else
|
||
|
+ if (fifo->pushbuf & NOUVEAU_GEM_DOMAIN_VRAM) {
|
||
|
+ push->flags |= NOUVEAU_BO_VRAM;
|
||
|
+ nvpb->type = NOUVEAU_BO_VRAM;
|
||
|
}
|
||
|
nvpb->type |= NOUVEAU_BO_MAP;
|
||
|
|
||
|
--
|
||
|
1.8.0.1
|
||
|
|