summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 5293908)
raw | patch | inline | side by side (parent: 5293908)
author | Thomas Hellstrom <thellstrom@vmware.com> | |
Wed, 21 Nov 2012 14:53:21 +0000 (14:53 +0000) | ||
committer | Dave Airlie <airlied@redhat.com> | |
Wed, 28 Nov 2012 08:37:59 +0000 (18:37 +1000) |
Removes the need for a write lock each time we call ttm_bo_unref().
v2: Remove an unused variable.
v3: Really remove the unused variable.
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
v2: Remove an unused variable.
v3: Really remove the unused variable.
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/ttm/ttm_bo.c | patch | blob | history | |
drivers/gpu/drm/ttm/ttm_bo_vm.c | patch | blob | history |
index 7426fe59108e65485b5bd45f5c2aa1c462518b63..2c54c3d414b3cb956e7cf953ab6a610bc5e6e82e 100644 (file)
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);
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);
index 3ba72dbdc4bd68495030c047b4b1ae87c7b9e13a..74705f329d992cb2a52b1f43f98ac0b4afe2155e 100644 (file)
read_lock(&bdev->vm_lock);
bo = ttm_bo_vm_lookup_rb(bdev, vma->vm_pgoff,
(vma->vm_end - vma->vm_start) >> PAGE_SHIFT);
- if (likely(bo != NULL))
- ttm_bo_reference(bo);
+ if (likely(bo != NULL) && !kref_get_unless_zero(&bo->kref))
+ bo = NULL;
read_unlock(&bdev->vm_lock);
if (unlikely(bo == NULL)) {