Merge tag 'drm-amdkfd-next-fixes-2015-02-03' of git://people.freedesktop.org/~gabbayo/linux into drm-next
- 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
This commit is contained in:
commit
2f8997902e
|
@ -167,7 +167,8 @@ static int create_queue_nocpsch(struct device_queue_manager *dqm,
|
||||||
}
|
}
|
||||||
|
|
||||||
list_add(&q->list, &qpd->queues_list);
|
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)
|
if (q->properties.type == KFD_QUEUE_TYPE_SDMA)
|
||||||
dqm->sdma_queue_count++;
|
dqm->sdma_queue_count++;
|
||||||
|
@ -313,7 +314,8 @@ static int destroy_queue_nocpsch(struct device_queue_manager *dqm,
|
||||||
list_del(&q->list);
|
list_del(&q->list);
|
||||||
if (list_empty(&qpd->queues_list))
|
if (list_empty(&qpd->queues_list))
|
||||||
deallocate_vmid(dqm, qpd, q);
|
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
|
* 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--;
|
dqm->sdma_queue_count--;
|
||||||
|
|
||||||
list_del(&q->list);
|
list_del(&q->list);
|
||||||
dqm->queue_count--;
|
if (q->properties.is_active)
|
||||||
|
dqm->queue_count--;
|
||||||
|
|
||||||
execute_queues_cpsch(dqm, false);
|
execute_queues_cpsch(dqm, false);
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,9 @@ static int init_mqd(struct mqd_manager *mm, void **mqd,
|
||||||
m->cp_hqd_pipe_priority = 1;
|
m->cp_hqd_pipe_priority = 1;
|
||||||
m->cp_hqd_queue_priority = 15;
|
m->cp_hqd_queue_priority = 15;
|
||||||
|
|
||||||
|
if (q->format == KFD_QUEUE_FORMAT_AQL)
|
||||||
|
m->cp_hqd_iq_rptr = AQL_ENABLE;
|
||||||
|
|
||||||
*mqd = m;
|
*mqd = m;
|
||||||
if (gart_addr != NULL)
|
if (gart_addr != NULL)
|
||||||
*gart_addr = addr;
|
*gart_addr = addr;
|
||||||
|
@ -187,7 +190,6 @@ static int update_mqd(struct mqd_manager *mm, void *mqd,
|
||||||
m->cp_hqd_vmid = q->vmid;
|
m->cp_hqd_vmid = q->vmid;
|
||||||
|
|
||||||
if (q->format == KFD_QUEUE_FORMAT_AQL) {
|
if (q->format == KFD_QUEUE_FORMAT_AQL) {
|
||||||
m->cp_hqd_iq_rptr = AQL_ENABLE;
|
|
||||||
m->cp_hqd_pq_control |= NO_UPDATE_RPTR;
|
m->cp_hqd_pq_control |= NO_UPDATE_RPTR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue