Lines Matching refs:bo
52 struct drm_gem_object **bo; member
61 drm_gem_object_put_unlocked(state->bo[i]); in vc4_free_hang_state()
105 state->bo = get_state->bo; in vc4_get_hang_state_ioctl()
115 struct vc4_bo *vc4_bo = to_vc4_bo(kernel_state->bo[i]); in vc4_get_hang_state_ioctl()
118 ret = drm_gem_handle_create(file_priv, kernel_state->bo[i], in vc4_get_hang_state_ioctl()
130 if (copy_to_user(u64_to_user_ptr(get_state->bo), in vc4_get_hang_state_ioctl()
155 struct vc4_bo *bo; in vc4_save_hang_state() local
180 list_for_each_entry(bo, &exec[i]->unref_list, unref_head) in vc4_save_hang_state()
185 kernel_state->bo = kcalloc(state->bo_count, in vc4_save_hang_state()
186 sizeof(*kernel_state->bo), GFP_ATOMIC); in vc4_save_hang_state()
188 if (!kernel_state->bo) { in vc4_save_hang_state()
199 bo = to_vc4_bo(&exec[i]->bo[j]->base); in vc4_save_hang_state()
205 WARN_ON(!refcount_read(&bo->usecnt)); in vc4_save_hang_state()
206 refcount_inc(&bo->usecnt); in vc4_save_hang_state()
207 drm_gem_object_get(&exec[i]->bo[j]->base); in vc4_save_hang_state()
208 kernel_state->bo[k++] = &exec[i]->bo[j]->base; in vc4_save_hang_state()
211 list_for_each_entry(bo, &exec[i]->unref_list, unref_head) { in vc4_save_hang_state()
215 drm_gem_object_get(&bo->base.base); in vc4_save_hang_state()
216 kernel_state->bo[k++] = &bo->base.base; in vc4_save_hang_state()
263 struct vc4_bo *bo = to_vc4_bo(kernel_state->bo[i]); in vc4_save_hang_state() local
265 if (bo->madv == __VC4_MADV_NOTSUPP) in vc4_save_hang_state()
268 mutex_lock(&bo->madv_lock); in vc4_save_hang_state()
269 if (!WARN_ON(bo->madv == __VC4_MADV_PURGED)) in vc4_save_hang_state()
270 bo->madv = VC4_MADV_WILLNEED; in vc4_save_hang_state()
271 refcount_dec(&bo->usecnt); in vc4_save_hang_state()
272 mutex_unlock(&bo->madv_lock); in vc4_save_hang_state()
539 struct vc4_bo *bo; in vc4_update_bo_seqnos() local
543 bo = to_vc4_bo(&exec->bo[i]->base); in vc4_update_bo_seqnos()
544 bo->seqno = seqno; in vc4_update_bo_seqnos()
546 dma_resv_add_shared_fence(bo->base.base.resv, exec->fence); in vc4_update_bo_seqnos()
549 list_for_each_entry(bo, &exec->unref_list, unref_head) { in vc4_update_bo_seqnos()
550 bo->seqno = seqno; in vc4_update_bo_seqnos()
554 bo = to_vc4_bo(&exec->rcl_write_bo[i]->base); in vc4_update_bo_seqnos()
555 bo->write_seqno = seqno; in vc4_update_bo_seqnos()
557 dma_resv_add_excl_fence(bo->base.base.resv, exec->fence); in vc4_update_bo_seqnos()
569 struct drm_gem_object *bo = &exec->bo[i]->base; in vc4_unlock_bo_reservations() local
571 ww_mutex_unlock(&bo->resv->lock); in vc4_unlock_bo_reservations()
591 struct drm_gem_object *bo; in vc4_lock_bo_reservations() local
597 bo = &exec->bo[contended_lock]->base; in vc4_lock_bo_reservations()
598 ret = ww_mutex_lock_slow_interruptible(&bo->resv->lock, in vc4_lock_bo_reservations()
610 bo = &exec->bo[i]->base; in vc4_lock_bo_reservations()
612 ret = ww_mutex_lock_interruptible(&bo->resv->lock, acquire_ctx); in vc4_lock_bo_reservations()
617 bo = &exec->bo[j]->base; in vc4_lock_bo_reservations()
618 ww_mutex_unlock(&bo->resv->lock); in vc4_lock_bo_reservations()
622 bo = &exec->bo[contended_lock]->base; in vc4_lock_bo_reservations()
624 ww_mutex_unlock(&bo->resv->lock); in vc4_lock_bo_reservations()
643 bo = &exec->bo[i]->base; in vc4_lock_bo_reservations()
645 ret = dma_resv_reserve_shared(bo->resv, 1); in vc4_lock_bo_reservations()
747 exec->bo = kvmalloc_array(exec->bo_count, in vc4_cl_lookup_bos()
750 if (!exec->bo) { in vc4_cl_lookup_bos()
771 struct drm_gem_object *bo = idr_find(&file_priv->object_idr, in vc4_cl_lookup_bos() local
773 if (!bo) { in vc4_cl_lookup_bos()
780 drm_gem_object_get(bo); in vc4_cl_lookup_bos()
781 exec->bo[i] = (struct drm_gem_cma_object *)bo; in vc4_cl_lookup_bos()
789 ret = vc4_bo_inc_usecnt(to_vc4_bo(&exec->bo[i]->base)); in vc4_cl_lookup_bos()
807 vc4_bo_dec_usecnt(to_vc4_bo(&exec->bo[i]->base)); in vc4_cl_lookup_bos()
811 for (i = 0; i < exec->bo_count && exec->bo[i]; i++) in vc4_cl_lookup_bos()
812 drm_gem_object_put_unlocked(&exec->bo[i]->base); in vc4_cl_lookup_bos()
816 kvfree(exec->bo); in vc4_cl_lookup_bos()
817 exec->bo = NULL; in vc4_cl_lookup_bos()
836 struct vc4_bo *bo; in vc4_get_bcl() local
890 bo = vc4_bo_create(dev, exec_size, true, VC4_BO_TYPE_BCL); in vc4_get_bcl()
891 if (IS_ERR(bo)) { in vc4_get_bcl()
893 ret = PTR_ERR(bo); in vc4_get_bcl()
896 exec->exec_bo = &bo->base; in vc4_get_bcl()
956 if (exec->bo) { in vc4_complete_exec()
958 struct vc4_bo *bo = to_vc4_bo(&exec->bo[i]->base); in vc4_complete_exec() local
960 vc4_bo_dec_usecnt(bo); in vc4_complete_exec()
961 drm_gem_object_put_unlocked(&exec->bo[i]->base); in vc4_complete_exec()
963 kvfree(exec->bo); in vc4_complete_exec()
967 struct vc4_bo *bo = list_first_entry(&exec->unref_list, in vc4_complete_exec() local
969 list_del(&bo->unref_head); in vc4_complete_exec()
970 drm_gem_object_put_unlocked(&bo->base.base); in vc4_complete_exec()
1096 struct vc4_bo *bo; in vc4_wait_bo_ioctl() local
1106 bo = to_vc4_bo(gem_obj); in vc4_wait_bo_ioctl()
1108 ret = vc4_wait_for_seqno_ioctl_helper(dev, bo->seqno, in vc4_wait_bo_ioctl()
1318 struct vc4_bo *bo; in vc4_gem_madvise_ioctl() local
1338 bo = to_vc4_bo(gem_obj); in vc4_gem_madvise_ioctl()
1341 if (bo->madv == __VC4_MADV_NOTSUPP) { in vc4_gem_madvise_ioctl()
1356 mutex_lock(&bo->madv_lock); in vc4_gem_madvise_ioctl()
1358 if (args->madv == VC4_MADV_DONTNEED && bo->madv == VC4_MADV_WILLNEED && in vc4_gem_madvise_ioctl()
1359 !refcount_read(&bo->usecnt)) { in vc4_gem_madvise_ioctl()
1364 vc4_bo_add_to_purgeable_pool(bo); in vc4_gem_madvise_ioctl()
1366 bo->madv == VC4_MADV_DONTNEED && in vc4_gem_madvise_ioctl()
1367 !refcount_read(&bo->usecnt)) { in vc4_gem_madvise_ioctl()
1371 vc4_bo_remove_from_purgeable_pool(bo); in vc4_gem_madvise_ioctl()
1375 args->retained = bo->madv != __VC4_MADV_PURGED; in vc4_gem_madvise_ioctl()
1378 if (bo->madv != __VC4_MADV_PURGED) in vc4_gem_madvise_ioctl()
1379 bo->madv = args->madv; in vc4_gem_madvise_ioctl()
1381 mutex_unlock(&bo->madv_lock); in vc4_gem_madvise_ioctl()