Merge tag 'drm-amdkfd-next-fixes-2015-02-03' of git://people.freedesktop.org/~gabbayo...
authorDave Airlie <airlied@redhat.com>
Thu, 5 Feb 2015 00:40:10 +0000 (10:40 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 5 Feb 2015 00:40:10 +0000 (10:40 +1000)
- Fixing accounting of active queues
- Preserving a register internal state

* tag 'drm-amdkfd-next-fixes-2015-02-03' of git://people.freedesktop.org/~gabbayo/linux:
  drm/amdkfd: Preserve CP_MQD_IQ_RPTR internal state
  drm/amdkfd: Fix dqm->queue_count tracking

drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c

index ecc78ece634c9c2856f617de506be1beb9d68041..36b95e16eab103dc44e9c42a5cb08bb51ac55126 100644 (file)
@@ -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);
 
index a318743cdcc2cce1a4b915c962fadb92d13445f0..a09e18a339f34ef1268ce9ccd8c6ef0804c9ff76 100644 (file)
@@ -94,6 +94,9 @@ static int init_mqd(struct mqd_manager *mm, void **mqd,
        m->cp_hqd_pipe_priority = 1;
        m->cp_hqd_queue_priority = 15;
 
+       if (q->format == KFD_QUEUE_FORMAT_AQL)
+               m->cp_hqd_iq_rptr = AQL_ENABLE;
+
        *mqd = m;
        if (gart_addr != NULL)
                *gart_addr = addr;
@@ -187,7 +190,6 @@ static int update_mqd(struct mqd_manager *mm, void *mqd,
        m->cp_hqd_vmid = q->vmid;
 
        if (q->format == KFD_QUEUE_FORMAT_AQL) {
-               m->cp_hqd_iq_rptr = AQL_ENABLE;
                m->cp_hqd_pq_control |= NO_UPDATE_RPTR;
        }