drm/ttm: fix adding foreign BOs to the LRU during init v2
authorChristian König <christian.koenig@amd.com>
Mon, 11 Jan 2016 14:35:18 +0000 (15:35 +0100)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 13 Jan 2016 17:18:31 +0000 (12:18 -0500)
If we import a BO with an external reservation object we don't
reserve/unreserve it. So we never add it to the LRU causing a possible
denial of service.

v2: fix typo in commit message

Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/ttm/ttm_bo.c

index 745e996d2dbcde4ec9b563f73d5791cc3aa4dbef..a98a5d5d756db6a3b608bd614bbd20910dd59088 100644 (file)
@@ -1170,9 +1170,15 @@ int ttm_bo_init(struct ttm_bo_device *bdev,
        if (likely(!ret))
                ret = ttm_bo_validate(bo, placement, interruptible, false);
 
-       if (!resv)
+       if (!resv) {
                ttm_bo_unreserve(bo);
 
+       } else if (!(bo->mem.placement & TTM_PL_FLAG_NO_EVICT)) {
+               spin_lock(&bo->glob->lru_lock);
+               ttm_bo_add_to_lru(bo);
+               spin_unlock(&bo->glob->lru_lock);
+       }
+
        if (unlikely(ret))
                ttm_bo_unref(&bo);