Lines Matching full:shared

45  * The reservation object provides a mechanism to manage shared and
48 * write operations) or N shared fences (read operations). The RCU
67 list = kmalloc(struct_size(list, shared, shared_max), GFP_KERNEL); in dma_resv_list_alloc()
71 list->shared_max = (ksize(list) - offsetof(typeof(*list), shared)) / in dma_resv_list_alloc()
72 sizeof(*list->shared); in dma_resv_list_alloc()
91 dma_fence_put(rcu_dereference_protected(list->shared[i], true)); in dma_resv_list_free()
134 * dma_resv_reserve_shared - Reserve space to add shared fences to
174 fence = rcu_dereference_protected(old->shared[i], in dma_resv_reserve_shared()
177 RCU_INIT_POINTER(new->shared[--k], fence); in dma_resv_reserve_shared()
179 RCU_INIT_POINTER(new->shared[j++], fence); in dma_resv_reserve_shared()
187 * active (unsignaled) shared fences. Individual fences and the in dma_resv_reserve_shared()
200 fence = rcu_dereference_protected(new->shared[i], in dma_resv_reserve_shared()
212 * dma_resv_reset_shared_max - reset shared fences for debugging
215 * Reset the number of pre-reserved shared slots to test that drivers do
225 /* Test shared fence slot reservation */ in dma_resv_reset_shared_max()
233 * dma_resv_add_shared_fence - Add a fence to a shared slot
235 * @fence: the shared fence to add
237 * Add a fence to a shared slot, obj->lock must be held, and
257 old = rcu_dereference_protected(fobj->shared[i], in dma_resv_add_shared_fence()
269 RCU_INIT_POINTER(fobj->shared[i], fence); in dma_resv_add_shared_fence()
281 * @fence: the shared fence to add
307 /* inplace update, no shared fences */ in dma_resv_add_excl_fence()
309 dma_fence_put(rcu_dereference_protected(old->shared[i], in dma_resv_add_excl_fence()
356 fence = rcu_dereference(src_list->shared[i]); in dma_resv_copy_fences()
372 dst = &dst_list->shared[dst_list->shared_count++]; in dma_resv_copy_fences()
399 * dma_resv_get_fences - Get an object's shared and exclusive
403 * @pshared_count: the number of shared fences returned
404 * @pshared: the array of shared fence ptrs returned (array is krealloc'd to
409 * shared fences as well. Returns either zero or -ENOMEM.
415 struct dma_fence **shared = NULL; in dma_resv_get_fences() local
436 sz += sizeof(*shared) * fobj->shared_max; in dma_resv_get_fences()
439 sz += sizeof(*shared); in dma_resv_get_fences()
444 nshared = krealloc(shared, sz, in dma_resv_get_fences()
452 nshared = krealloc(shared, sz, GFP_KERNEL); in dma_resv_get_fences()
454 shared = nshared; in dma_resv_get_fences()
461 shared = nshared; in dma_resv_get_fences()
464 shared[i] = rcu_dereference(fobj->shared[i]); in dma_resv_get_fences()
465 if (!dma_fence_get_rcu(shared[i])) in dma_resv_get_fences()
472 dma_fence_put(shared[i]); in dma_resv_get_fences()
485 shared[shared_count++] = fence_excl; in dma_resv_get_fences()
488 kfree(shared); in dma_resv_get_fences()
489 shared = NULL; in dma_resv_get_fences()
493 *pshared = shared; in dma_resv_get_fences()
500 * shared and/or exclusive fences.
549 lfence = rcu_dereference(fobj->shared[i]); in dma_resv_wait_timeout()
633 fence = rcu_dereference(fobj->shared[i]); in dma_resv_test_signaled()