diff options
| author | Christian König <[email protected]> | 2019-08-09 15:27:21 +0000 |
|---|---|---|
| committer | Alex Deucher <[email protected]> | 2019-08-14 20:45:53 +0000 |
| commit | e1b4ce25dbc93ab0cb8ed0f236a3b9ff7b03802c (patch) | |
| tree | 2d6fed0206a76b9cfa53001ce820922bcc803253 | |
| parent | drm/amd/display: use kvmalloc for dc_state (v2) (diff) | |
| download | kernel-e1b4ce25dbc93ab0cb8ed0f236a3b9ff7b03802c.tar.gz kernel-e1b4ce25dbc93ab0cb8ed0f236a3b9ff7b03802c.zip | |
drm/scheduler: use job count instead of peek
The spsc_queue_peek function is accessing queue->head which belongs to
the consumer thread and shouldn't be accessed by the producer
This is fixing a rare race condition when destroying entities.
Signed-off-by: Christian König <[email protected]>
Acked-by: Andrey Grodzovsky <[email protected]>
Reviewed-by: [email protected]
Signed-off-by: Alex Deucher <[email protected]>
| -rw-r--r-- | drivers/gpu/drm/scheduler/sched_entity.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c index 35ddbec1375a..671c90f34ede 100644 --- a/drivers/gpu/drm/scheduler/sched_entity.c +++ b/drivers/gpu/drm/scheduler/sched_entity.c @@ -95,7 +95,7 @@ static bool drm_sched_entity_is_idle(struct drm_sched_entity *entity) rmb(); /* for list_empty to work without lock */ if (list_empty(&entity->list) || - spsc_queue_peek(&entity->job_queue) == NULL) + spsc_queue_count(&entity->job_queue) == 0) return true; return false; @@ -281,7 +281,7 @@ void drm_sched_entity_fini(struct drm_sched_entity *entity) /* Consumption of existing IBs wasn't completed. Forcefully * remove them here. */ - if (spsc_queue_peek(&entity->job_queue)) { + if (spsc_queue_count(&entity->job_queue)) { if (sched) { /* Park the kernel for a moment to make sure it isn't processing * our enity. |
