drm/nouveau: add some debug output if nouveau_mm busy at destroy time
authorBen Skeggs <bskeggs@redhat.com>
Tue, 7 Jun 2011 06:18:19 +0000 (16:18 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 23 Jun 2011 06:00:55 +0000 (16:00 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_mm.c
drivers/gpu/drm/nouveau/nouveau_vm.c

index 7609756..1640dec 100644 (file)
@@ -158,11 +158,18 @@ int
 nouveau_mm_fini(struct nouveau_mm **prmm)
 {
        struct nouveau_mm *rmm = *prmm;
-       struct nouveau_mm_node *heap =
+       struct nouveau_mm_node *node, *heap =
                list_first_entry(&rmm->nodes, struct nouveau_mm_node, nl_entry);
 
-       if (!list_is_singular(&rmm->nodes))
+       if (!list_is_singular(&rmm->nodes)) {
+               printk(KERN_ERR "nouveau_mm not empty at destroy time!\n");
+               list_for_each_entry(node, &rmm->nodes, nl_entry) {
+                       printk(KERN_ERR "0x%02x: 0x%08x 0x%08x\n",
+                              node->type, node->offset, node->length);
+               }
+               WARN_ON(1);
                return -EBUSY;
+       }
 
        kfree(heap);
        kfree(rmm);
index 519a6b4..75ef595 100644 (file)
@@ -396,8 +396,8 @@ nouveau_vm_del(struct nouveau_vm *vm)
        list_for_each_entry_safe(vpgd, tmp, &vm->pgd_list, head) {
                nouveau_vm_unlink(vm, vpgd->obj);
        }
-       WARN_ON(nouveau_mm_fini(&vm->mm) != 0);
 
+       nouveau_mm_fini(&vm->mm);
        kfree(vm->pgt);
        kfree(vm);
 }