drm/sched: Avoid data corruptions
[ Upstream commit 0b10ab80695d61422337ede6ff496552d8ace99d ] Wait for all dependencies of a job to complete before killing it to avoid data corruptions. Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210519141407.88444-1-andrey.grodzovsky@amd.com Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
5ed8c298b2
commit
0687411e2a
@@ -219,11 +219,16 @@ static void drm_sched_entity_kill_jobs_cb(struct dma_fence *f,
|
|||||||
static void drm_sched_entity_kill_jobs(struct drm_sched_entity *entity)
|
static void drm_sched_entity_kill_jobs(struct drm_sched_entity *entity)
|
||||||
{
|
{
|
||||||
struct drm_sched_job *job;
|
struct drm_sched_job *job;
|
||||||
|
struct dma_fence *f;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
while ((job = to_drm_sched_job(spsc_queue_pop(&entity->job_queue)))) {
|
while ((job = to_drm_sched_job(spsc_queue_pop(&entity->job_queue)))) {
|
||||||
struct drm_sched_fence *s_fence = job->s_fence;
|
struct drm_sched_fence *s_fence = job->s_fence;
|
||||||
|
|
||||||
|
/* Wait for all dependencies to avoid data corruptions */
|
||||||
|
while ((f = job->sched->ops->dependency(job, entity)))
|
||||||
|
dma_fence_wait(f, false);
|
||||||
|
|
||||||
drm_sched_fence_scheduled(s_fence);
|
drm_sched_fence_scheduled(s_fence);
|
||||||
dma_fence_set_error(&s_fence->finished, -ESRCH);
|
dma_fence_set_error(&s_fence->finished, -ESRCH);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user