mirror of
https://github.com/torvalds/linux.git
synced 2024-09-20 06:53:04 +00:00
drm/xe: Add xe_exec_queue_last_fence_test_dep
Helpful to determine if a bind can immediately use CPU or needs to be deferred a drm scheduler job. v7: - Better wording in kernel doc (Matthew Auld) Signed-off-by: Matthew Brost <matthew.brost@intel.com> Reviewed-by: Matthew Auld <matthew.auld@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240704041652.272920-4-matthew.brost@intel.com
This commit is contained in:
parent
2e524668c4
commit
96e7ebb220
|
@ -906,3 +906,26 @@ void xe_exec_queue_last_fence_set(struct xe_exec_queue *q, struct xe_vm *vm,
|
|||
xe_exec_queue_last_fence_put(q, vm);
|
||||
q->last_fence = dma_fence_get(fence);
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_exec_queue_last_fence_test_dep - Test last fence dependency of queue
|
||||
* @q: The exec queue
|
||||
* @vm: The VM the engine does a bind or exec for
|
||||
*
|
||||
* Returns:
|
||||
* -ETIME if there exists an unsignalled last fence dependency, zero otherwise.
|
||||
*/
|
||||
int xe_exec_queue_last_fence_test_dep(struct xe_exec_queue *q, struct xe_vm *vm)
|
||||
{
|
||||
struct dma_fence *fence;
|
||||
int err = 0;
|
||||
|
||||
fence = xe_exec_queue_last_fence_get(q, vm);
|
||||
if (fence) {
|
||||
err = test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags) ?
|
||||
0 : -ETIME;
|
||||
dma_fence_put(fence);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -75,6 +75,8 @@ struct dma_fence *xe_exec_queue_last_fence_get(struct xe_exec_queue *e,
|
|||
struct xe_vm *vm);
|
||||
void xe_exec_queue_last_fence_set(struct xe_exec_queue *e, struct xe_vm *vm,
|
||||
struct dma_fence *fence);
|
||||
int xe_exec_queue_last_fence_test_dep(struct xe_exec_queue *q,
|
||||
struct xe_vm *vm);
|
||||
void xe_exec_queue_update_run_ticks(struct xe_exec_queue *q);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue
Block a user