diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2013-01-07 13:07:13 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2013-01-07 13:15:28 +1000 |
commit | 891517f5111cd82909906d5e8ee0299db0d46762 (patch) | |
tree | 50e825af9bbbe90854399556a6fa0d87d4c9cc4d /nouveau | |
parent | baf0a7daafc7636106e1b19267ed22e22b1a2283 (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>
Diffstat (limited to 'nouveau')
-rw-r--r-- | nouveau/pushbuf.c | 8 |
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; |