Loading drivers/gpu/drm/nouveau/nouveau_bo.c +6 −42 Original line number Diff line number Diff line Loading @@ -88,13 +88,13 @@ nv10_bo_get_tile_region(struct drm_device *dev, int i) static void nv10_bo_put_tile_region(struct drm_device *dev, struct nouveau_drm_tile *tile, struct nouveau_fence *fence) struct fence *fence) { struct nouveau_drm *drm = nouveau_drm(dev); if (tile) { spin_lock(&drm->tile.lock); tile->fence = nouveau_fence_ref(fence); tile->fence = nouveau_fence_ref((struct nouveau_fence *)fence); tile->used = false; spin_unlock(&drm->tile.lock); } Loading Loading @@ -976,7 +976,8 @@ nouveau_bo_move_m2mf(struct ttm_buffer_object *bo, int evict, bool intr, if (ret == 0) { ret = nouveau_fence_new(chan, false, &fence); if (ret == 0) { ret = ttm_bo_move_accel_cleanup(bo, fence, ret = ttm_bo_move_accel_cleanup(bo, &fence->base, evict, no_wait_gpu, new_mem); Loading Loading @@ -1167,8 +1168,9 @@ nouveau_bo_vm_cleanup(struct ttm_buffer_object *bo, { struct nouveau_drm *drm = nouveau_bdev(bo->bdev); struct drm_device *dev = drm->dev; struct fence *fence = reservation_object_get_excl(bo->resv); nv10_bo_put_tile_region(dev, *old_tile, bo->sync_obj); nv10_bo_put_tile_region(dev, *old_tile, fence); *old_tile = new_tile; } Loading Loading @@ -1455,47 +1457,14 @@ 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 reservation_object *resv = nvbo->bo.resv; nouveau_bo_fence_unref(&nvbo->bo.sync_obj); nvbo->bo.sync_obj = nouveau_fence_ref(fence); reservation_object_add_excl_fence(resv, &fence->base); } static void * nouveau_bo_fence_ref(void *sync_obj) { return nouveau_fence_ref(sync_obj); } static bool nouveau_bo_fence_signalled(void *sync_obj) { return nouveau_fence_done(sync_obj); } static int nouveau_bo_fence_wait(void *sync_obj, bool lazy, bool intr) { return nouveau_fence_wait(sync_obj, lazy, intr); } static int nouveau_bo_fence_flush(void *sync_obj) { return 0; } struct ttm_bo_driver nouveau_bo_driver = { .ttm_tt_create = &nouveau_ttm_tt_create, .ttm_tt_populate = &nouveau_ttm_tt_populate, Loading @@ -1506,11 +1475,6 @@ struct ttm_bo_driver nouveau_bo_driver = { .move_notify = nouveau_bo_move_ntfy, .move = nouveau_bo_move, .verify_access = nouveau_bo_verify_access, .sync_obj_signaled = nouveau_bo_fence_signalled, .sync_obj_wait = nouveau_bo_fence_wait, .sync_obj_flush = nouveau_bo_fence_flush, .sync_obj_unref = nouveau_bo_fence_unref, .sync_obj_ref = nouveau_bo_fence_ref, .fault_reserve_notify = &nouveau_ttm_fault_reserve_notify, .io_mem_reserve = &nouveau_ttm_io_mem_reserve, .io_mem_free = &nouveau_ttm_io_mem_free, Loading drivers/gpu/drm/nouveau/nouveau_fence.c +8 −16 Original line number Diff line number Diff line Loading @@ -185,17 +185,18 @@ static void nouveau_fence_work_cb(struct fence *fence, struct fence_cb *cb) } void nouveau_fence_work(struct nouveau_fence *fence, nouveau_fence_work(struct fence *fence, void (*func)(void *), void *data) { struct nouveau_fence_work *work; if (fence_is_signaled(&fence->base)) if (fence_is_signaled(fence)) goto err; work = kmalloc(sizeof(*work), GFP_KERNEL); if (!work) { WARN_ON(nouveau_fence_wait(fence, false, false)); WARN_ON(nouveau_fence_wait((struct nouveau_fence *)fence, false, false)); goto err; } Loading @@ -203,7 +204,7 @@ nouveau_fence_work(struct nouveau_fence *fence, work->func = func; work->data = data; if (fence_add_callback(&fence->base, &work->cb, nouveau_fence_work_cb) < 0) if (fence_add_callback(fence, &work->cb, nouveau_fence_work_cb) < 0) goto err_free; return; Loading Loading @@ -349,14 +350,9 @@ nouveau_fence_sync(struct nouveau_bo *nvbo, struct nouveau_channel *chan) struct reservation_object_list *fobj; int ret = 0, i; fence = nvbo->bo.sync_obj; if (fence && fence_is_signaled(fence)) { nouveau_fence_unref((struct nouveau_fence **) &nvbo->bo.sync_obj); fence = NULL; } fence = reservation_object_get_excl(resv); if (fence) { if (fence && !fence_is_signaled(fence)) { struct nouveau_fence *f = from_fence(fence); struct nouveau_channel *prev = f->channel; Loading @@ -370,12 +366,8 @@ nouveau_fence_sync(struct nouveau_bo *nvbo, struct nouveau_channel *chan) if (ret) return ret; fence = reservation_object_get_excl(resv); if (fence && !nouveau_local_fence(fence, chan->drm)) ret = fence_wait(fence, true); fobj = reservation_object_get_list(resv); if (!fobj || ret) if (!fobj) return ret; for (i = 0; i < fobj->shared_count && !ret; ++i) { Loading drivers/gpu/drm/nouveau/nouveau_fence.h +1 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ void nouveau_fence_unref(struct nouveau_fence **); int nouveau_fence_emit(struct nouveau_fence *, struct nouveau_channel *); bool nouveau_fence_done(struct nouveau_fence *); void nouveau_fence_work(struct nouveau_fence *, void (*)(void *), void *); void nouveau_fence_work(struct fence *, void (*)(void *), void *); int nouveau_fence_wait(struct nouveau_fence *, bool lazy, bool intr); int nouveau_fence_sync(struct nouveau_bo *, struct nouveau_channel *); Loading drivers/gpu/drm/nouveau/nouveau_gem.c +9 −7 Original line number Diff line number Diff line Loading @@ -98,13 +98,12 @@ static void nouveau_gem_object_unmap(struct nouveau_bo *nvbo, struct nouveau_vma *vma) { const bool mapped = nvbo->bo.mem.mem_type != TTM_PL_SYSTEM; struct nouveau_fence *fence = NULL; struct fence *fence = NULL; list_del(&vma->head); if (mapped) { fence = nouveau_fence_ref(nvbo->bo.sync_obj); } if (mapped) fence = reservation_object_get_excl(nvbo->bo.resv); if (fence) { nouveau_fence_work(fence, nouveau_gem_object_delete, vma); Loading @@ -114,7 +113,6 @@ nouveau_gem_object_unmap(struct nouveau_bo *nvbo, struct nouveau_vma *vma) nouveau_vm_put(vma); kfree(vma); } nouveau_fence_unref(&fence); } void Loading Loading @@ -874,8 +872,12 @@ nouveau_gem_ioctl_cpu_prep(struct drm_device *dev, void *data, ret = ttm_bo_reserve(&nvbo->bo, true, false, false, NULL); if (!ret) { ret = ttm_bo_wait(&nvbo->bo, true, true, true); if (!no_wait && ret) fence = nouveau_fence_ref(nvbo->bo.sync_obj); if (!no_wait && ret) { struct fence *excl; excl = reservation_object_get_excl(nvbo->bo.resv); fence = nouveau_fence_ref((struct nouveau_fence *)excl); } ttm_bo_unreserve(&nvbo->bo); } Loading drivers/gpu/drm/qxl/qxl_debugfs.c +3 −3 Original line number Diff line number Diff line Loading @@ -67,9 +67,9 @@ qxl_debugfs_buffers_info(struct seq_file *m, void *data) rel = fobj ? fobj->shared_count : 0; rcu_read_unlock(); seq_printf(m, "size %ld, pc %d, sync obj %p, num releases %d\n", (unsigned long)bo->gem_base.size, bo->pin_count, bo->tbo.sync_obj, rel); seq_printf(m, "size %ld, pc %d, num releases %d\n", (unsigned long)bo->gem_base.size, bo->pin_count, rel); } spin_unlock(&qdev->release_lock); return 0; Loading Loading
drivers/gpu/drm/nouveau/nouveau_bo.c +6 −42 Original line number Diff line number Diff line Loading @@ -88,13 +88,13 @@ nv10_bo_get_tile_region(struct drm_device *dev, int i) static void nv10_bo_put_tile_region(struct drm_device *dev, struct nouveau_drm_tile *tile, struct nouveau_fence *fence) struct fence *fence) { struct nouveau_drm *drm = nouveau_drm(dev); if (tile) { spin_lock(&drm->tile.lock); tile->fence = nouveau_fence_ref(fence); tile->fence = nouveau_fence_ref((struct nouveau_fence *)fence); tile->used = false; spin_unlock(&drm->tile.lock); } Loading Loading @@ -976,7 +976,8 @@ nouveau_bo_move_m2mf(struct ttm_buffer_object *bo, int evict, bool intr, if (ret == 0) { ret = nouveau_fence_new(chan, false, &fence); if (ret == 0) { ret = ttm_bo_move_accel_cleanup(bo, fence, ret = ttm_bo_move_accel_cleanup(bo, &fence->base, evict, no_wait_gpu, new_mem); Loading Loading @@ -1167,8 +1168,9 @@ nouveau_bo_vm_cleanup(struct ttm_buffer_object *bo, { struct nouveau_drm *drm = nouveau_bdev(bo->bdev); struct drm_device *dev = drm->dev; struct fence *fence = reservation_object_get_excl(bo->resv); nv10_bo_put_tile_region(dev, *old_tile, bo->sync_obj); nv10_bo_put_tile_region(dev, *old_tile, fence); *old_tile = new_tile; } Loading Loading @@ -1455,47 +1457,14 @@ 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 reservation_object *resv = nvbo->bo.resv; nouveau_bo_fence_unref(&nvbo->bo.sync_obj); nvbo->bo.sync_obj = nouveau_fence_ref(fence); reservation_object_add_excl_fence(resv, &fence->base); } static void * nouveau_bo_fence_ref(void *sync_obj) { return nouveau_fence_ref(sync_obj); } static bool nouveau_bo_fence_signalled(void *sync_obj) { return nouveau_fence_done(sync_obj); } static int nouveau_bo_fence_wait(void *sync_obj, bool lazy, bool intr) { return nouveau_fence_wait(sync_obj, lazy, intr); } static int nouveau_bo_fence_flush(void *sync_obj) { return 0; } struct ttm_bo_driver nouveau_bo_driver = { .ttm_tt_create = &nouveau_ttm_tt_create, .ttm_tt_populate = &nouveau_ttm_tt_populate, Loading @@ -1506,11 +1475,6 @@ struct ttm_bo_driver nouveau_bo_driver = { .move_notify = nouveau_bo_move_ntfy, .move = nouveau_bo_move, .verify_access = nouveau_bo_verify_access, .sync_obj_signaled = nouveau_bo_fence_signalled, .sync_obj_wait = nouveau_bo_fence_wait, .sync_obj_flush = nouveau_bo_fence_flush, .sync_obj_unref = nouveau_bo_fence_unref, .sync_obj_ref = nouveau_bo_fence_ref, .fault_reserve_notify = &nouveau_ttm_fault_reserve_notify, .io_mem_reserve = &nouveau_ttm_io_mem_reserve, .io_mem_free = &nouveau_ttm_io_mem_free, Loading
drivers/gpu/drm/nouveau/nouveau_fence.c +8 −16 Original line number Diff line number Diff line Loading @@ -185,17 +185,18 @@ static void nouveau_fence_work_cb(struct fence *fence, struct fence_cb *cb) } void nouveau_fence_work(struct nouveau_fence *fence, nouveau_fence_work(struct fence *fence, void (*func)(void *), void *data) { struct nouveau_fence_work *work; if (fence_is_signaled(&fence->base)) if (fence_is_signaled(fence)) goto err; work = kmalloc(sizeof(*work), GFP_KERNEL); if (!work) { WARN_ON(nouveau_fence_wait(fence, false, false)); WARN_ON(nouveau_fence_wait((struct nouveau_fence *)fence, false, false)); goto err; } Loading @@ -203,7 +204,7 @@ nouveau_fence_work(struct nouveau_fence *fence, work->func = func; work->data = data; if (fence_add_callback(&fence->base, &work->cb, nouveau_fence_work_cb) < 0) if (fence_add_callback(fence, &work->cb, nouveau_fence_work_cb) < 0) goto err_free; return; Loading Loading @@ -349,14 +350,9 @@ nouveau_fence_sync(struct nouveau_bo *nvbo, struct nouveau_channel *chan) struct reservation_object_list *fobj; int ret = 0, i; fence = nvbo->bo.sync_obj; if (fence && fence_is_signaled(fence)) { nouveau_fence_unref((struct nouveau_fence **) &nvbo->bo.sync_obj); fence = NULL; } fence = reservation_object_get_excl(resv); if (fence) { if (fence && !fence_is_signaled(fence)) { struct nouveau_fence *f = from_fence(fence); struct nouveau_channel *prev = f->channel; Loading @@ -370,12 +366,8 @@ nouveau_fence_sync(struct nouveau_bo *nvbo, struct nouveau_channel *chan) if (ret) return ret; fence = reservation_object_get_excl(resv); if (fence && !nouveau_local_fence(fence, chan->drm)) ret = fence_wait(fence, true); fobj = reservation_object_get_list(resv); if (!fobj || ret) if (!fobj) return ret; for (i = 0; i < fobj->shared_count && !ret; ++i) { Loading
drivers/gpu/drm/nouveau/nouveau_fence.h +1 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ void nouveau_fence_unref(struct nouveau_fence **); int nouveau_fence_emit(struct nouveau_fence *, struct nouveau_channel *); bool nouveau_fence_done(struct nouveau_fence *); void nouveau_fence_work(struct nouveau_fence *, void (*)(void *), void *); void nouveau_fence_work(struct fence *, void (*)(void *), void *); int nouveau_fence_wait(struct nouveau_fence *, bool lazy, bool intr); int nouveau_fence_sync(struct nouveau_bo *, struct nouveau_channel *); Loading
drivers/gpu/drm/nouveau/nouveau_gem.c +9 −7 Original line number Diff line number Diff line Loading @@ -98,13 +98,12 @@ static void nouveau_gem_object_unmap(struct nouveau_bo *nvbo, struct nouveau_vma *vma) { const bool mapped = nvbo->bo.mem.mem_type != TTM_PL_SYSTEM; struct nouveau_fence *fence = NULL; struct fence *fence = NULL; list_del(&vma->head); if (mapped) { fence = nouveau_fence_ref(nvbo->bo.sync_obj); } if (mapped) fence = reservation_object_get_excl(nvbo->bo.resv); if (fence) { nouveau_fence_work(fence, nouveau_gem_object_delete, vma); Loading @@ -114,7 +113,6 @@ nouveau_gem_object_unmap(struct nouveau_bo *nvbo, struct nouveau_vma *vma) nouveau_vm_put(vma); kfree(vma); } nouveau_fence_unref(&fence); } void Loading Loading @@ -874,8 +872,12 @@ nouveau_gem_ioctl_cpu_prep(struct drm_device *dev, void *data, ret = ttm_bo_reserve(&nvbo->bo, true, false, false, NULL); if (!ret) { ret = ttm_bo_wait(&nvbo->bo, true, true, true); if (!no_wait && ret) fence = nouveau_fence_ref(nvbo->bo.sync_obj); if (!no_wait && ret) { struct fence *excl; excl = reservation_object_get_excl(nvbo->bo.resv); fence = nouveau_fence_ref((struct nouveau_fence *)excl); } ttm_bo_unreserve(&nvbo->bo); } Loading
drivers/gpu/drm/qxl/qxl_debugfs.c +3 −3 Original line number Diff line number Diff line Loading @@ -67,9 +67,9 @@ qxl_debugfs_buffers_info(struct seq_file *m, void *data) rel = fobj ? fobj->shared_count : 0; rcu_read_unlock(); seq_printf(m, "size %ld, pc %d, sync obj %p, num releases %d\n", (unsigned long)bo->gem_base.size, bo->pin_count, bo->tbo.sync_obj, rel); seq_printf(m, "size %ld, pc %d, num releases %d\n", (unsigned long)bo->gem_base.size, bo->pin_count, rel); } spin_unlock(&qdev->release_lock); return 0; Loading