.default_attrs = ttm_bo_global_attrs
 };
 
-static void ttm_bo_add_mem_to_lru(struct ttm_buffer_object *bo,
-                                 struct ttm_resource *mem)
-{
-       struct ttm_bo_device *bdev = bo->bdev;
-       struct ttm_resource_manager *man;
-
-       if (!list_empty(&bo->lru) || bo->pin_count)
-               return;
-
-       man = ttm_manager_type(bdev, mem->mem_type);
-       list_add_tail(&bo->lru, &man->lru[bo->priority]);
-
-       if (man->use_tt && bo->ttm &&
-           !(bo->ttm->page_flags & (TTM_PAGE_FLAG_SG |
-                                    TTM_PAGE_FLAG_SWAPPED))) {
-               list_add_tail(&bo->swap, &ttm_bo_glob.swap_lru[bo->priority]);
-       }
-}
-
 static void ttm_bo_del_from_lru(struct ttm_buffer_object *bo)
 {
        struct ttm_bo_device *bdev = bo->bdev;
-       bool notify = false;
 
-       if (!list_empty(&bo->swap)) {
-               list_del_init(&bo->swap);
-               notify = true;
-       }
-       if (!list_empty(&bo->lru)) {
-               list_del_init(&bo->lru);
-               notify = true;
-       }
+       list_del_init(&bo->swap);
+       list_del_init(&bo->lru);
 
-       if (notify && bdev->driver->del_from_lru_notify)
+       if (bdev->driver->del_from_lru_notify)
                bdev->driver->del_from_lru_notify(bo);
 }
 
 }
 
 void ttm_bo_move_to_lru_tail(struct ttm_buffer_object *bo,
+                            struct ttm_resource *mem,
                             struct ttm_lru_bulk_move *bulk)
 {
+       struct ttm_bo_device *bdev = bo->bdev;
+       struct ttm_resource_manager *man;
+
        dma_resv_assert_held(bo->base.resv);
 
-       ttm_bo_del_from_lru(bo);
-       ttm_bo_add_mem_to_lru(bo, &bo->mem);
+       if (bo->pin_count)
+               return;
+
+       man = ttm_manager_type(bdev, mem->mem_type);
+       list_move_tail(&bo->lru, &man->lru[bo->priority]);
+       if (man->use_tt && bo->ttm &&
+           !(bo->ttm->page_flags & (TTM_PAGE_FLAG_SG |
+                                    TTM_PAGE_FLAG_SWAPPED))) {
+               struct list_head *swap;
+
+               swap = &ttm_bo_glob.swap_lru[bo->priority];
+               list_move_tail(&bo->swap, swap);
+       }
+
+       if (bdev->driver->del_from_lru_notify)
+               bdev->driver->del_from_lru_notify(bo);
 
        if (bulk && !bo->pin_count) {
                switch (bo->mem.mem_type) {
                 */
                if (WARN_ON(bo->pin_count)) {
                        bo->pin_count = 0;
-                       ttm_bo_del_from_lru(bo);
-                       ttm_bo_add_mem_to_lru(bo, &bo->mem);
+                       ttm_bo_move_to_lru_tail(bo, &bo->mem, NULL);
                }
 
                kref_init(&bo->kref);
        mem->placement = place->flags;
 
        spin_lock(&ttm_bo_glob.lru_lock);
-       ttm_bo_del_from_lru(bo);
-       ttm_bo_add_mem_to_lru(bo, mem);
+       ttm_bo_move_to_lru_tail(bo, mem, NULL);
        spin_unlock(&ttm_bo_glob.lru_lock);
 
        return 0;
 
        list_for_each_entry(entry, list, head) {
                struct ttm_buffer_object *bo = entry->bo;
 
-               ttm_bo_move_to_lru_tail(bo, NULL);
+               ttm_bo_move_to_lru_tail(bo, &bo->mem, NULL);
                dma_resv_unlock(bo->base.resv);
        }
        spin_unlock(&ttm_bo_glob.lru_lock);
                        dma_resv_add_shared_fence(bo->base.resv, fence);
                else
                        dma_resv_add_excl_fence(bo->base.resv, fence);
-               ttm_bo_move_to_lru_tail(bo, NULL);
+               ttm_bo_move_to_lru_tail(bo, &bo->mem, NULL);
                dma_resv_unlock(bo->base.resv);
        }
        spin_unlock(&ttm_bo_glob.lru_lock);