Lines Matching full:fence

23 #include <linux/dma-fence.h>
36 /* Eviction Fence
37 * Fence helper functions to deal with KFD memory eviction.
41 * All the BOs in a process share an eviction fence. When process X wants
59 * user queues and signal fence. The work item will also start another delayed
67 struct amdgpu_amdkfd_fence *fence; in amdgpu_amdkfd_fence_create() local
69 fence = kzalloc(sizeof(*fence), GFP_KERNEL); in amdgpu_amdkfd_fence_create()
70 if (fence == NULL) in amdgpu_amdkfd_fence_create()
75 fence->mm = mm; in amdgpu_amdkfd_fence_create()
76 get_task_comm(fence->timeline_name, current); in amdgpu_amdkfd_fence_create()
77 spin_lock_init(&fence->lock); in amdgpu_amdkfd_fence_create()
78 fence->svm_bo = svm_bo; in amdgpu_amdkfd_fence_create()
79 dma_fence_init(&fence->base, &amdkfd_fence_ops, &fence->lock, in amdgpu_amdkfd_fence_create()
82 return fence; in amdgpu_amdkfd_fence_create()
87 struct amdgpu_amdkfd_fence *fence; in to_amdgpu_amdkfd_fence() local
92 fence = container_of(f, struct amdgpu_amdkfd_fence, base); in to_amdgpu_amdkfd_fence()
94 return fence; in to_amdgpu_amdkfd_fence()
106 struct amdgpu_amdkfd_fence *fence = to_amdgpu_amdkfd_fence(f); in amdkfd_fence_get_timeline_name() local
108 return fence->timeline_name; in amdkfd_fence_get_timeline_name()
114 * If fence is already signaled return true.
115 * If fence is not signaled schedule a evict KFD process work item.
121 struct amdgpu_amdkfd_fence *fence = to_amdgpu_amdkfd_fence(f); in amdkfd_fence_enable_signaling() local
123 if (!fence) in amdkfd_fence_enable_signaling()
129 if (!fence->svm_bo) { in amdkfd_fence_enable_signaling()
130 if (!kgd2kfd_schedule_evict_and_restore_process(fence->mm, f)) in amdkfd_fence_enable_signaling()
133 if (!svm_range_schedule_evict_svm_bo(fence)) in amdkfd_fence_enable_signaling()
140 * amdkfd_fence_release - callback that fence can be freed
145 * Drops the mm_struct reference and RCU schedules freeing up the fence.
149 struct amdgpu_amdkfd_fence *fence = to_amdgpu_amdkfd_fence(f); in amdkfd_fence_release() local
151 /* Unconditionally signal the fence. The process is getting in amdkfd_fence_release()
154 if (WARN_ON(!fence)) in amdkfd_fence_release()
157 mmdrop(fence->mm); in amdkfd_fence_release()
164 * @f: [IN] fence
167 * Check if @mm is same as that of the fence @f, if same return TRUE else
173 struct amdgpu_amdkfd_fence *fence = to_amdgpu_amdkfd_fence(f); in amdkfd_fence_check_mm() local
175 if (!fence) in amdkfd_fence_check_mm()
177 else if (fence->mm == mm && !fence->svm_bo) in amdkfd_fence_check_mm()