From 891517f5111cd82909906d5e8ee0299db0d46762 Mon Sep 17 00:00:00 2001 From: Ben Skeggs 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 --- nouveau/pushbuf.c | 8 ++++---- 1 file 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;