From 846034cf48def68b6e8ff4d9fce73c96c436eb35 Mon Sep 17 00:00:00 2001 From: Oak Zeng Date: Tue, 26 Nov 2019 13:27:45 +0800 Subject: [PATCH 0876/1453] drm/amdkfd: Fix sdma queue allocate race condition SDMA queue allocation requires the dqm lock as it modify the global dqm members. Enclose it in the dqm_lock. v2: ported missing change to amd-staging-dkms-5.2 Signed-off-by: Oak Zeng Reviewed-by: Philip Yang Signed-off-by: Alex Deucher Reviewed-by: Felix Kuehling Signed-off-by: Felix Kuehling Signed-off-by: Flora Cui --- drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c index c1ec139c547d..4f8c55842726 100755 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c @@ -1334,7 +1334,9 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q, if (q->properties.type == KFD_QUEUE_TYPE_SDMA || q->properties.type == KFD_QUEUE_TYPE_SDMA_XGMI) { + dqm_lock(dqm); retval = allocate_sdma_queue(dqm, q); + dqm_unlock(dqm); if (retval) goto out; } @@ -1398,7 +1400,9 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q, out_deallocate_sdma_queue: if (q->properties.type == KFD_QUEUE_TYPE_SDMA || q->properties.type == KFD_QUEUE_TYPE_SDMA_XGMI) { + dqm_lock(dqm); deallocate_sdma_queue(dqm, q); + dqm_unlock(dqm); } out: return retval; -- 2.17.1