[PATCH 07/19] drm/ttm: kill fence_lock
No users are left, kill it off! :D Conversion to the reservation api is next on the list, after that the functionality can be restored with rcu. Signed-off-by: Maarten Lankhorst --- drivers/gpu/drm/nouveau/nouveau_bo.c | 25 +++--- drivers/gpu/drm/nouveau/nouveau_display.c |6 -- drivers/gpu/drm/nouveau/nouveau_gem.c | 16 +- drivers/gpu/drm/qxl/qxl_cmd.c |2 - drivers/gpu/drm/qxl/qxl_fence.c |4 -- drivers/gpu/drm/qxl/qxl_object.h |2 - drivers/gpu/drm/qxl/qxl_release.c |2 - drivers/gpu/drm/radeon/radeon_display.c |9 ++- drivers/gpu/drm/radeon/radeon_object.c|2 - drivers/gpu/drm/ttm/ttm_bo.c | 75 +++-- drivers/gpu/drm/ttm/ttm_bo_util.c |5 -- drivers/gpu/drm/ttm/ttm_bo_vm.c |3 - drivers/gpu/drm/ttm/ttm_execbuf_util.c|2 - drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c|4 -- drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 17 ++- include/drm/ttm/ttm_bo_api.h |5 -- include/drm/ttm/ttm_bo_driver.h |3 - 17 files changed, 40 insertions(+), 142 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c index 62d79492c7c5..2cf5b0572f66 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bo.c +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c @@ -1196,9 +1196,7 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict, bool intr, } /* Fallback to software copy. */ - spin_lock(>bdev->fence_lock); ret = ttm_bo_wait(bo, true, intr, no_wait_gpu); - spin_unlock(>bdev->fence_lock); if (ret == 0) ret = ttm_bo_move_memcpy(bo, evict, no_wait_gpu, new_mem); @@ -1425,26 +1423,19 @@ nouveau_ttm_tt_unpopulate(struct ttm_tt *ttm) ttm_pool_unpopulate(ttm); } +static void +nouveau_bo_fence_unref(void **sync_obj) +{ + nouveau_fence_unref((struct nouveau_fence **)sync_obj); +} + void nouveau_bo_fence(struct nouveau_bo *nvbo, struct nouveau_fence *fence) { - struct nouveau_fence *new_fence = nouveau_fence_ref(fence); - struct nouveau_fence *old_fence = NULL; - lockdep_assert_held(>bo.resv->lock.base); - spin_lock(>bo.bdev->fence_lock); - old_fence = nvbo->bo.sync_obj; - nvbo->bo.sync_obj = new_fence; - spin_unlock(>bo.bdev->fence_lock); - - nouveau_fence_unref(_fence); -} - -static void -nouveau_bo_fence_unref(void **sync_obj) -{ - nouveau_fence_unref((struct nouveau_fence **)sync_obj); + nouveau_bo_fence_unref(>bo.sync_obj); + nvbo->bo.sync_obj = nouveau_fence_ref(fence); } static void * diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index 826b66c44235..7928f8f07334 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c @@ -721,11 +721,7 @@ nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, goto fail_unpin; /* synchronise rendering channel with the kernel's channel */ - spin_lock(_bo->bo.bdev->fence_lock); - fence = nouveau_fence_ref(new_bo->bo.sync_obj); - spin_unlock(_bo->bo.bdev->fence_lock); - ret = nouveau_fence_sync(fence, chan); - nouveau_fence_unref(); + ret = nouveau_fence_sync(new_bo->bo.sync_obj, chan); if (ret) { ttm_bo_unreserve(_bo->bo); goto fail_unpin; diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c index 0da3740f150f..474f67238cef 100644 --- a/drivers/gpu/drm/nouveau/nouveau_gem.c +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c @@ -105,9 +105,7 @@ nouveau_gem_object_unmap(struct nouveau_bo *nvbo, struct nouveau_vma *vma) list_del(>head); if (mapped) { - spin_lock(>bo.bdev->fence_lock); fence = nouveau_fence_ref(nvbo->bo.sync_obj); - spin_unlock(>bo.bdev->fence_lock); } if (fence) { @@ -432,17 +430,11 @@ retry: static int validate_sync(struct nouveau_channel *chan, struct nouveau_bo *nvbo) { - struct nouveau_fence *fence = NULL; + struct nouveau_fence *fence = nvbo->bo.sync_obj; int ret = 0; - spin_lock(>bo.bdev->fence_lock); - fence = nouveau_fence_ref(nvbo->bo.sync_obj); - spin_unlock(>bo.bdev->fence_lock); - - if (fence) { + if (fence) ret = nouveau_fence_sync(fence, chan); - nouveau_fence_unref(); - } return ret; } @@ -661,9 +653,7 @@ nouveau_gem_pushbuf_reloc_apply(struct nouveau_cli *cli, data |= r->vor; } - spin_lock(>bo.bdev->fence_lock); ret = ttm_bo_wait(>bo, false, false, false); - spin_unlock(>bo.bdev->fence_lock); if (ret) {
[PATCH 07/19] drm/ttm: kill fence_lock
No users are left, kill it off! :D Conversion to the reservation api is next on the list, after that the functionality can be restored with rcu. Signed-off-by: Maarten Lankhorst maarten.lankho...@canonical.com --- drivers/gpu/drm/nouveau/nouveau_bo.c | 25 +++--- drivers/gpu/drm/nouveau/nouveau_display.c |6 -- drivers/gpu/drm/nouveau/nouveau_gem.c | 16 +- drivers/gpu/drm/qxl/qxl_cmd.c |2 - drivers/gpu/drm/qxl/qxl_fence.c |4 -- drivers/gpu/drm/qxl/qxl_object.h |2 - drivers/gpu/drm/qxl/qxl_release.c |2 - drivers/gpu/drm/radeon/radeon_display.c |9 ++- drivers/gpu/drm/radeon/radeon_object.c|2 - drivers/gpu/drm/ttm/ttm_bo.c | 75 +++-- drivers/gpu/drm/ttm/ttm_bo_util.c |5 -- drivers/gpu/drm/ttm/ttm_bo_vm.c |3 - drivers/gpu/drm/ttm/ttm_execbuf_util.c|2 - drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c|4 -- drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 17 ++- include/drm/ttm/ttm_bo_api.h |5 -- include/drm/ttm/ttm_bo_driver.h |3 - 17 files changed, 40 insertions(+), 142 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c index 62d79492c7c5..2cf5b0572f66 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bo.c +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c @@ -1196,9 +1196,7 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict, bool intr, } /* Fallback to software copy. */ - spin_lock(bo-bdev-fence_lock); ret = ttm_bo_wait(bo, true, intr, no_wait_gpu); - spin_unlock(bo-bdev-fence_lock); if (ret == 0) ret = ttm_bo_move_memcpy(bo, evict, no_wait_gpu, new_mem); @@ -1425,26 +1423,19 @@ nouveau_ttm_tt_unpopulate(struct ttm_tt *ttm) ttm_pool_unpopulate(ttm); } +static void +nouveau_bo_fence_unref(void **sync_obj) +{ + nouveau_fence_unref((struct nouveau_fence **)sync_obj); +} + void nouveau_bo_fence(struct nouveau_bo *nvbo, struct nouveau_fence *fence) { - struct nouveau_fence *new_fence = nouveau_fence_ref(fence); - struct nouveau_fence *old_fence = NULL; - lockdep_assert_held(nvbo-bo.resv-lock.base); - spin_lock(nvbo-bo.bdev-fence_lock); - old_fence = nvbo-bo.sync_obj; - nvbo-bo.sync_obj = new_fence; - spin_unlock(nvbo-bo.bdev-fence_lock); - - nouveau_fence_unref(old_fence); -} - -static void -nouveau_bo_fence_unref(void **sync_obj) -{ - nouveau_fence_unref((struct nouveau_fence **)sync_obj); + nouveau_bo_fence_unref(nvbo-bo.sync_obj); + nvbo-bo.sync_obj = nouveau_fence_ref(fence); } static void * diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index 826b66c44235..7928f8f07334 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c @@ -721,11 +721,7 @@ nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, goto fail_unpin; /* synchronise rendering channel with the kernel's channel */ - spin_lock(new_bo-bo.bdev-fence_lock); - fence = nouveau_fence_ref(new_bo-bo.sync_obj); - spin_unlock(new_bo-bo.bdev-fence_lock); - ret = nouveau_fence_sync(fence, chan); - nouveau_fence_unref(fence); + ret = nouveau_fence_sync(new_bo-bo.sync_obj, chan); if (ret) { ttm_bo_unreserve(new_bo-bo); goto fail_unpin; diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c index 0da3740f150f..474f67238cef 100644 --- a/drivers/gpu/drm/nouveau/nouveau_gem.c +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c @@ -105,9 +105,7 @@ nouveau_gem_object_unmap(struct nouveau_bo *nvbo, struct nouveau_vma *vma) list_del(vma-head); if (mapped) { - spin_lock(nvbo-bo.bdev-fence_lock); fence = nouveau_fence_ref(nvbo-bo.sync_obj); - spin_unlock(nvbo-bo.bdev-fence_lock); } if (fence) { @@ -432,17 +430,11 @@ retry: static int validate_sync(struct nouveau_channel *chan, struct nouveau_bo *nvbo) { - struct nouveau_fence *fence = NULL; + struct nouveau_fence *fence = nvbo-bo.sync_obj; int ret = 0; - spin_lock(nvbo-bo.bdev-fence_lock); - fence = nouveau_fence_ref(nvbo-bo.sync_obj); - spin_unlock(nvbo-bo.bdev-fence_lock); - - if (fence) { + if (fence) ret = nouveau_fence_sync(fence, chan); - nouveau_fence_unref(fence); - } return ret; } @@ -661,9 +653,7 @@ nouveau_gem_pushbuf_reloc_apply(struct nouveau_cli *cli, data |= r-vor; } - spin_lock(nvbo-bo.bdev-fence_lock); ret = ttm_bo_wait(nvbo-bo, false, false, false); -