drm/sched: Rework HW fence processing.
Expedite job deletion from ring mirror list to the HW fence signal callback instead from finish_work, together with waiting for all such fences to signal in drm_sched_stop we garantee that already signaled job will not be processed twice. Remove the sched finish fence callback and just submit finish_work directly from the HW fence callback. v2: Fix comments. v3: Attach hw fence cb to sched_job v5: Rebase Suggested-by: Christian Koenig <Christian.Koenig@amd.com> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:

committed by
Alex Deucher

parent
222b5f0441
commit
3741540e04
@@ -137,10 +137,6 @@ struct drm_sched_fence {
|
||||
*/
|
||||
struct dma_fence finished;
|
||||
|
||||
/**
|
||||
* @cb: the callback for the parent fence below.
|
||||
*/
|
||||
struct dma_fence_cb cb;
|
||||
/**
|
||||
* @parent: the fence returned by &drm_sched_backend_ops.run_job
|
||||
* when scheduling the job on hardware. We signal the
|
||||
@@ -181,6 +177,7 @@ struct drm_sched_fence *to_drm_sched_fence(struct dma_fence *f);
|
||||
* be scheduled further.
|
||||
* @s_priority: the priority of the job.
|
||||
* @entity: the entity to which this job belongs.
|
||||
* @cb: the callback for the parent fence in s_fence.
|
||||
*
|
||||
* A job is created by the driver using drm_sched_job_init(), and
|
||||
* should call drm_sched_entity_push_job() once it wants the scheduler
|
||||
@@ -197,6 +194,7 @@ struct drm_sched_job {
|
||||
atomic_t karma;
|
||||
enum drm_sched_priority s_priority;
|
||||
struct drm_sched_entity *entity;
|
||||
struct dma_fence_cb cb;
|
||||
};
|
||||
|
||||
static inline bool drm_sched_invalidate_job(struct drm_sched_job *s_job,
|
||||
|
Reference in New Issue
Block a user