drm/amdkfd: Update queue_count before mapping queues
authorFelix Kuehling <Felix.Kuehling@amd.com>
Wed, 1 Nov 2017 23:21:32 +0000 (19:21 -0400)
committerOded Gabbay <oded.gabbay@gmail.com>
Wed, 1 Nov 2017 23:21:32 +0000 (19:21 -0400)
map_queues_cpsch uses the queue_count to decide whether to upload
a new runlist. So update the counter before calling it.

Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com>
Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c

index 45b98dd..e2fc4c5 100644 (file)
@@ -408,6 +408,17 @@ static int update_queue(struct device_queue_manager *dqm, struct queue *q)
 
        retval = mqd->update_mqd(mqd, q->mqd, &q->properties);
 
+       /*
+        * check active state vs. the previous state and modify
+        * counter accordingly. map_queues_cpsch uses the
+        * dqm->queue_count to determine whether a new runlist must be
+        * uploaded.
+        */
+       if (q->properties.is_active && !prev_active)
+               dqm->queue_count++;
+       else if (!q->properties.is_active && prev_active)
+               dqm->queue_count--;
+
        if (sched_policy != KFD_SCHED_POLICY_NO_HWS)
                retval = map_queues_cpsch(dqm);
        else if (sched_policy == KFD_SCHED_POLICY_NO_HWS &&
@@ -417,15 +428,6 @@ static int update_queue(struct device_queue_manager *dqm, struct queue *q)
                retval = mqd->load_mqd(mqd, q->mqd, q->pipe, q->queue,
                                       &q->properties, q->process->mm);
 
-       /*
-        * check active state vs. the previous state
-        * and modify counter accordingly
-        */
-       if (q->properties.is_active && !prev_active)
-               dqm->queue_count++;
-       else if (!q->properties.is_active && prev_active)
-               dqm->queue_count--;
-
 out_unlock:
        mutex_unlock(&dqm->lock);
        return retval;