|
@@ -696,6 +696,7 @@ static void ttm_bo_release(struct kref *kref)
|
|
|
struct ttm_bo_device *bdev = bo->bdev;
|
|
|
struct ttm_mem_type_manager *man = &bdev->man[bo->mem.mem_type];
|
|
|
|
|
|
+ write_lock(&bdev->vm_lock);
|
|
|
if (likely(bo->vm_node != NULL)) {
|
|
|
rb_erase(&bo->vm_rb, &bdev->addr_space_rb);
|
|
|
drm_mm_put_block(bo->vm_node);
|
|
@@ -707,18 +708,14 @@ static void ttm_bo_release(struct kref *kref)
|
|
|
ttm_mem_io_unlock(man);
|
|
|
ttm_bo_cleanup_refs_or_queue(bo);
|
|
|
kref_put(&bo->list_kref, ttm_bo_release_list);
|
|
|
- write_lock(&bdev->vm_lock);
|
|
|
}
|
|
|
|
|
|
void ttm_bo_unref(struct ttm_buffer_object **p_bo)
|
|
|
{
|
|
|
struct ttm_buffer_object *bo = *p_bo;
|
|
|
- struct ttm_bo_device *bdev = bo->bdev;
|
|
|
|
|
|
*p_bo = NULL;
|
|
|
- write_lock(&bdev->vm_lock);
|
|
|
kref_put(&bo->kref, ttm_bo_release);
|
|
|
- write_unlock(&bdev->vm_lock);
|
|
|
}
|
|
|
EXPORT_SYMBOL(ttm_bo_unref);
|
|
|
|