drm/nouveau: warn when moving a pinned object
authorAlexandre Courbot <acourbot@nvidia.com>
Mon, 27 Oct 2014 09:11:52 +0000 (18:11 +0900)
committerBen Skeggs <bskeggs@redhat.com>
Tue, 2 Dec 2014 05:43:58 +0000 (15:43 +1000)
Pinned BOs are supposed to remain in their current location until
unpinned. Display a warning for the supposedly-erroneous case where we
are trying to move such objects.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_bo.c

index 3d474ac03f8847c7985c2c664a88bed1cfa189b0..9a8adeec80cd160a5afb4011d0d89cd842cf428b 100644 (file)
@@ -323,8 +323,8 @@ nouveau_bo_pin(struct nouveau_bo *nvbo, uint32_t memtype)
                goto out;
        }
 
-       if (nvbo->pin_refcnt++)
-               goto out;
+       if (nvbo->pin_refcnt)
+               goto ref_inc;
 
        nouveau_bo_placement_set(nvbo, memtype, 0);
 
@@ -341,6 +341,10 @@ nouveau_bo_pin(struct nouveau_bo *nvbo, uint32_t memtype)
                        break;
                }
        }
+
+ref_inc:
+       nvbo->pin_refcnt++;
+
 out:
        ttm_bo_unreserve(bo);
        return ret;
@@ -1184,6 +1188,9 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict, bool intr,
        struct nouveau_drm_tile *new_tile = NULL;
        int ret = 0;
 
+       if (nvbo->pin_refcnt)
+               NV_WARN(drm, "Moving pinned object %p!\n", nvbo);
+
        if (drm->device.info.family < NV_DEVICE_INFO_V0_TESLA) {
                ret = nouveau_bo_vm_bind(bo, new_mem, &new_tile);
                if (ret)