Lines Matching +full:point +full:- +full:to +full:- +full:point

1 // SPDX-License-Identifier: GPL-2.0-only OR MIT
9 #include <linux/dma-fence-unwrap.h>
20 if (sync_op->flags & ~DRM_PVR_SYNC_OP_FLAGS_MASK) in pvr_check_sync_op()
21 return -EINVAL; in pvr_check_sync_op()
23 handle_type = sync_op->flags & DRM_PVR_SYNC_OP_FLAG_HANDLE_TYPE_MASK; in pvr_check_sync_op()
26 return -EINVAL; in pvr_check_sync_op()
29 sync_op->value != 0) in pvr_check_sync_op()
30 return -EINVAL; in pvr_check_sync_op()
41 drm_syncobj_put(sig_sync->syncobj); in pvr_sync_signal_free()
42 dma_fence_chain_free(sig_sync->chain); in pvr_sync_signal_free()
43 dma_fence_put(sig_sync->fence); in pvr_sync_signal_free()
60 pvr_sync_signal_array_add(struct xarray *array, struct drm_file *file, u32 handle, u64 point) in pvr_sync_signal_array_add() argument
69 return ERR_PTR(-ENOMEM); in pvr_sync_signal_array_add()
71 sig_sync->handle = handle; in pvr_sync_signal_array_add()
72 sig_sync->point = point; in pvr_sync_signal_array_add()
74 if (point > 0) { in pvr_sync_signal_array_add()
75 sig_sync->chain = dma_fence_chain_alloc(); in pvr_sync_signal_array_add()
76 if (!sig_sync->chain) { in pvr_sync_signal_array_add()
77 err = -ENOMEM; in pvr_sync_signal_array_add()
82 sig_sync->syncobj = drm_syncobj_find(file, handle); in pvr_sync_signal_array_add()
83 if (!sig_sync->syncobj) { in pvr_sync_signal_array_add()
84 err = -EINVAL; in pvr_sync_signal_array_add()
88 /* Retrieve the current fence attached to that point. It's in pvr_sync_signal_array_add()
89 * perfectly fine to get a NULL fence here, it just means there's in pvr_sync_signal_array_add()
90 * no fence attached to that point yet. in pvr_sync_signal_array_add()
92 if (!drm_syncobj_find_fence(file, handle, point, 0, &cur_fence)) in pvr_sync_signal_array_add()
93 sig_sync->fence = cur_fence; in pvr_sync_signal_array_add()
107 pvr_sync_signal_array_search(struct xarray *array, u32 handle, u64 point) in pvr_sync_signal_array_search() argument
113 if (handle == sig_sync->handle && point == sig_sync->point) in pvr_sync_signal_array_search()
121 pvr_sync_signal_array_get(struct xarray *array, struct drm_file *file, u32 handle, u64 point) in pvr_sync_signal_array_get() argument
125 sig_sync = pvr_sync_signal_array_search(array, handle, point); in pvr_sync_signal_array_get()
129 return pvr_sync_signal_array_add(array, file, handle, point); in pvr_sync_signal_array_get()
175 return -EINVAL; in pvr_sync_signal_array_update_fences()
177 old_fence = sig_sync->fence; in pvr_sync_signal_array_update_fences()
178 sig_sync->fence = dma_fence_get(done_fence); in pvr_sync_signal_array_update_fences()
181 if (WARN_ON(!sig_sync->fence)) in pvr_sync_signal_array_update_fences()
182 return -EINVAL; in pvr_sync_signal_array_update_fences()
195 if (sig_sync->chain) { in pvr_sync_signal_array_push_fences()
196 drm_syncobj_add_point(sig_sync->syncobj, sig_sync->chain, in pvr_sync_signal_array_push_fences()
197 sig_sync->fence, sig_sync->point); in pvr_sync_signal_array_push_fences()
198 sig_sync->chain = NULL; in pvr_sync_signal_array_push_fences()
200 drm_syncobj_replace_fence(sig_sync->syncobj, sig_sync->fence); in pvr_sync_signal_array_push_fences()
218 /* No need to unwrap the fence if it's fully non-native. */ in pvr_sync_add_dep_to_job()
237 dma_fence_get(&s_fence->scheduled)); in pvr_sync_add_dep_to_job()
272 if (WARN_ON(!sig_sync->fence)) in pvr_sync_add_deps_to_job()
273 return -EINVAL; in pvr_sync_add_deps_to_job()
275 fence = dma_fence_get(sig_sync->fence); in pvr_sync_add_deps_to_job()