summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2013-01-07 13:07:13 +1000
committerBen Skeggs <bskeggs@redhat.com>2013-01-07 13:15:28 +1000
commit891517f5111cd82909906d5e8ee0299db0d46762 (patch)
tree50e825af9bbbe90854399556a6fa0d87d4c9cc4d
parentbaf0a7daafc7636106e1b19267ed22e22b1a2283 (diff)
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>
-rw-r--r--nouveau/pushbuf.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/nouveau/pushbuf.c b/nouveau/pushbuf.c
index 0e37ce3d..ff8e125e 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;