nouveau: make sure initial kalloc for user bo ends up in the right place
authorMaarten Maathuis <madman2003@gmail.com>
Wed, 24 Feb 2010 22:10:34 +0000 (23:10 +0100)
committerMaarten Maathuis <madman2003@gmail.com>
Tue, 2 Mar 2010 22:25:50 +0000 (23:25 +0100)
- Currently reloc'ing a user bo to gart will first cause an allocation in vram,
which is then written to by cpu, then the bo gets moved to gart.

Acked-by: Francisco Jerez <currojerez@riseup.net>
Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
nouveau/nouveau_reloc.c

index 301482b..332dfa0 100644 (file)
@@ -73,6 +73,12 @@ nouveau_reloc_emit(struct nouveau_channel *chan, struct nouveau_bo *reloc_bo,
                return -EINVAL;
        }
 
+       /* We're about to reloc a user buffer, better make sure we don't cause
+        * a double migration.
+        */
+       if (!(nvbo->flags & (NOUVEAU_BO_GART | NOUVEAU_BO_VRAM)))
+               nvbo->flags |= (flags & (NOUVEAU_BO_GART | NOUVEAU_BO_VRAM));
+
        rpbbo = nouveau_bo_emit_buffer(chan, reloc_bo);
        if (!rpbbo)
                return -ENOMEM;