diff options
author | Jay Cornwall <jay.cornwall@amd.com> | 2015-01-19 16:08:14 -0600 |
---|---|---|
committer | Oded Gabbay <oded.gabbay@amd.com> | 2015-01-19 16:08:14 -0600 |
commit | b6819cec29cc0088e7398db9ed8377ab8328e012 (patch) | |
tree | 122d2c75ab114635b5d236cad3621d105e8eeeef /drivers/gpu/drm/amd | |
parent | e4bf44b3b558742fb7c58b4d34e206c8942f07e6 (diff) | |
download | talos-op-linux-b6819cec29cc0088e7398db9ed8377ab8328e012.tar.gz talos-op-linux-b6819cec29cc0088e7398db9ed8377ab8328e012.zip |
drm/amdkfd: Fix dqm->queue_count tracking
dqm->queue_count tracks queues in the active state only. In a few
places this count is modified unconditionally, leading to an incorrect
value when the UPDATE_QUEUE ioctl is used to make a queue inactive.
Signed-off-by: Jay Cornwall <jay.cornwall@amd.com>
Reviewed-by: Ben Goz <ben.goz@amd.com>
Signed-off-by: Oded Gabbay <oded.gabbay@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd')
-rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 9 |
1 files changed, 6 insertions, 3 deletions
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 ecc78ece634c..36b95e16eab1 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c @@ -167,7 +167,8 @@ static int create_queue_nocpsch(struct device_queue_manager *dqm, } list_add(&q->list, &qpd->queues_list); - dqm->queue_count++; + if (q->properties.is_active) + dqm->queue_count++; if (q->properties.type == KFD_QUEUE_TYPE_SDMA) dqm->sdma_queue_count++; @@ -313,7 +314,8 @@ static int destroy_queue_nocpsch(struct device_queue_manager *dqm, list_del(&q->list); if (list_empty(&qpd->queues_list)) deallocate_vmid(dqm, qpd, q); - dqm->queue_count--; + if (q->properties.is_active) + dqm->queue_count--; /* * Unconditionally decrement this counter, regardless of the queue's @@ -1018,7 +1020,8 @@ static int destroy_queue_cpsch(struct device_queue_manager *dqm, dqm->sdma_queue_count--; list_del(&q->list); - dqm->queue_count--; + if (q->properties.is_active) + dqm->queue_count--; execute_queues_cpsch(dqm, false); |