drm/sched: Add drm_sched_start_timeout_unlocked helper
Also add a lockdep assert to drm_sched_start_timeout. Signed-off-by: Matthew Brost <matthew.brost@intel.com> Reviewed-by: Luben Tuikov <luben.tuikov@amd.com> Link: https://lore.kernel.org/r/20231031032439.1558703-5-matthew.brost@intel.com Signed-off-by: Luben Tuikov <ltuikov89@gmail.com>
This commit is contained in:
committed by
Luben Tuikov
parent
f7fe64ad0f
commit
7a36dcfa16
@@ -334,11 +334,20 @@ static void drm_sched_job_done_cb(struct dma_fence *f, struct dma_fence_cb *cb)
|
|||||||
*/
|
*/
|
||||||
static void drm_sched_start_timeout(struct drm_gpu_scheduler *sched)
|
static void drm_sched_start_timeout(struct drm_gpu_scheduler *sched)
|
||||||
{
|
{
|
||||||
|
lockdep_assert_held(&sched->job_list_lock);
|
||||||
|
|
||||||
if (sched->timeout != MAX_SCHEDULE_TIMEOUT &&
|
if (sched->timeout != MAX_SCHEDULE_TIMEOUT &&
|
||||||
!list_empty(&sched->pending_list))
|
!list_empty(&sched->pending_list))
|
||||||
queue_delayed_work(sched->timeout_wq, &sched->work_tdr, sched->timeout);
|
queue_delayed_work(sched->timeout_wq, &sched->work_tdr, sched->timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void drm_sched_start_timeout_unlocked(struct drm_gpu_scheduler *sched)
|
||||||
|
{
|
||||||
|
spin_lock(&sched->job_list_lock);
|
||||||
|
drm_sched_start_timeout(sched);
|
||||||
|
spin_unlock(&sched->job_list_lock);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* drm_sched_fault - immediately start timeout handler
|
* drm_sched_fault - immediately start timeout handler
|
||||||
*
|
*
|
||||||
@@ -451,11 +460,8 @@ static void drm_sched_job_timedout(struct work_struct *work)
|
|||||||
spin_unlock(&sched->job_list_lock);
|
spin_unlock(&sched->job_list_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status != DRM_GPU_SCHED_STAT_ENODEV) {
|
if (status != DRM_GPU_SCHED_STAT_ENODEV)
|
||||||
spin_lock(&sched->job_list_lock);
|
drm_sched_start_timeout_unlocked(sched);
|
||||||
drm_sched_start_timeout(sched);
|
|
||||||
spin_unlock(&sched->job_list_lock);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -581,11 +587,8 @@ void drm_sched_start(struct drm_gpu_scheduler *sched, bool full_recovery)
|
|||||||
drm_sched_job_done(s_job, -ECANCELED);
|
drm_sched_job_done(s_job, -ECANCELED);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (full_recovery) {
|
if (full_recovery)
|
||||||
spin_lock(&sched->job_list_lock);
|
drm_sched_start_timeout_unlocked(sched);
|
||||||
drm_sched_start_timeout(sched);
|
|
||||||
spin_unlock(&sched->job_list_lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
drm_sched_wqueue_start(sched);
|
drm_sched_wqueue_start(sched);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user