diff options
| author | Ingo Molnar <mingo@kernel.org> | 2015-03-27 04:46:03 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2015-03-27 04:46:03 -0400 |
| commit | 072e5a1cfabca7276744d24726e094d85721df5c (patch) | |
| tree | c7237fa143f72273aa8a8179f741c24b9072001c /drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c | |
| parent | 294fe0f52a44c6f207211de0686c369a961b5533 (diff) | |
| parent | d525211f9d1be8b523ec7633f080f2116f5ea536 (diff) | |
Merge branch 'perf/urgent' into perf/core, to pick up fixes and to refresh the tree
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c index e415a2a9207e..c7d298e62c96 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c | |||
| @@ -44,7 +44,7 @@ static bool initialize(struct kernel_queue *kq, struct kfd_dev *dev, | |||
| 44 | BUG_ON(!kq || !dev); | 44 | BUG_ON(!kq || !dev); |
| 45 | BUG_ON(type != KFD_QUEUE_TYPE_DIQ && type != KFD_QUEUE_TYPE_HIQ); | 45 | BUG_ON(type != KFD_QUEUE_TYPE_DIQ && type != KFD_QUEUE_TYPE_HIQ); |
| 46 | 46 | ||
| 47 | pr_debug("kfd: In func %s initializing queue type %d size %d\n", | 47 | pr_debug("amdkfd: In func %s initializing queue type %d size %d\n", |
| 48 | __func__, KFD_QUEUE_TYPE_HIQ, queue_size); | 48 | __func__, KFD_QUEUE_TYPE_HIQ, queue_size); |
| 49 | 49 | ||
| 50 | nop.opcode = IT_NOP; | 50 | nop.opcode = IT_NOP; |
| @@ -69,12 +69,16 @@ static bool initialize(struct kernel_queue *kq, struct kfd_dev *dev, | |||
| 69 | 69 | ||
| 70 | prop.doorbell_ptr = kfd_get_kernel_doorbell(dev, &prop.doorbell_off); | 70 | prop.doorbell_ptr = kfd_get_kernel_doorbell(dev, &prop.doorbell_off); |
| 71 | 71 | ||
| 72 | if (prop.doorbell_ptr == NULL) | 72 | if (prop.doorbell_ptr == NULL) { |
| 73 | pr_err("amdkfd: error init doorbell"); | ||
| 73 | goto err_get_kernel_doorbell; | 74 | goto err_get_kernel_doorbell; |
| 75 | } | ||
| 74 | 76 | ||
| 75 | retval = kfd_gtt_sa_allocate(dev, queue_size, &kq->pq); | 77 | retval = kfd_gtt_sa_allocate(dev, queue_size, &kq->pq); |
| 76 | if (retval != 0) | 78 | if (retval != 0) { |
| 79 | pr_err("amdkfd: error init pq queues size (%d)\n", queue_size); | ||
| 77 | goto err_pq_allocate_vidmem; | 80 | goto err_pq_allocate_vidmem; |
| 81 | } | ||
| 78 | 82 | ||
| 79 | kq->pq_kernel_addr = kq->pq->cpu_ptr; | 83 | kq->pq_kernel_addr = kq->pq->cpu_ptr; |
| 80 | kq->pq_gpu_addr = kq->pq->gpu_addr; | 84 | kq->pq_gpu_addr = kq->pq->gpu_addr; |
| @@ -165,10 +169,8 @@ err_rptr_allocate_vidmem: | |||
| 165 | err_eop_allocate_vidmem: | 169 | err_eop_allocate_vidmem: |
| 166 | kfd_gtt_sa_free(dev, kq->pq); | 170 | kfd_gtt_sa_free(dev, kq->pq); |
| 167 | err_pq_allocate_vidmem: | 171 | err_pq_allocate_vidmem: |
| 168 | pr_err("kfd: error init pq\n"); | ||
| 169 | kfd_release_kernel_doorbell(dev, prop.doorbell_ptr); | 172 | kfd_release_kernel_doorbell(dev, prop.doorbell_ptr); |
| 170 | err_get_kernel_doorbell: | 173 | err_get_kernel_doorbell: |
| 171 | pr_err("kfd: error init doorbell"); | ||
| 172 | return false; | 174 | return false; |
| 173 | 175 | ||
| 174 | } | 176 | } |
| @@ -187,6 +189,8 @@ static void uninitialize(struct kernel_queue *kq) | |||
| 187 | else if (kq->queue->properties.type == KFD_QUEUE_TYPE_DIQ) | 189 | else if (kq->queue->properties.type == KFD_QUEUE_TYPE_DIQ) |
| 188 | kfd_gtt_sa_free(kq->dev, kq->fence_mem_obj); | 190 | kfd_gtt_sa_free(kq->dev, kq->fence_mem_obj); |
| 189 | 191 | ||
| 192 | kq->mqd->uninit_mqd(kq->mqd, kq->queue->mqd, kq->queue->mqd_mem_obj); | ||
| 193 | |||
| 190 | kfd_gtt_sa_free(kq->dev, kq->rptr_mem); | 194 | kfd_gtt_sa_free(kq->dev, kq->rptr_mem); |
| 191 | kfd_gtt_sa_free(kq->dev, kq->wptr_mem); | 195 | kfd_gtt_sa_free(kq->dev, kq->wptr_mem); |
| 192 | kq->ops_asic_specific.uninitialize(kq); | 196 | kq->ops_asic_specific.uninitialize(kq); |
| @@ -211,7 +215,7 @@ static int acquire_packet_buffer(struct kernel_queue *kq, | |||
| 211 | queue_address = (unsigned int *)kq->pq_kernel_addr; | 215 | queue_address = (unsigned int *)kq->pq_kernel_addr; |
| 212 | queue_size_dwords = kq->queue->properties.queue_size / sizeof(uint32_t); | 216 | queue_size_dwords = kq->queue->properties.queue_size / sizeof(uint32_t); |
| 213 | 217 | ||
| 214 | pr_debug("kfd: In func %s\nrptr: %d\nwptr: %d\nqueue_address 0x%p\n", | 218 | pr_debug("amdkfd: In func %s\nrptr: %d\nwptr: %d\nqueue_address 0x%p\n", |
| 215 | __func__, rptr, wptr, queue_address); | 219 | __func__, rptr, wptr, queue_address); |
| 216 | 220 | ||
| 217 | available_size = (rptr - 1 - wptr + queue_size_dwords) % | 221 | available_size = (rptr - 1 - wptr + queue_size_dwords) % |
| @@ -296,7 +300,7 @@ struct kernel_queue *kernel_queue_init(struct kfd_dev *dev, | |||
| 296 | } | 300 | } |
| 297 | 301 | ||
| 298 | if (kq->ops.initialize(kq, dev, type, KFD_KERNEL_QUEUE_SIZE) == false) { | 302 | if (kq->ops.initialize(kq, dev, type, KFD_KERNEL_QUEUE_SIZE) == false) { |
| 299 | pr_err("kfd: failed to init kernel queue\n"); | 303 | pr_err("amdkfd: failed to init kernel queue\n"); |
| 300 | kfree(kq); | 304 | kfree(kq); |
| 301 | return NULL; | 305 | return NULL; |
| 302 | } | 306 | } |
| @@ -319,7 +323,7 @@ static __attribute__((unused)) void test_kq(struct kfd_dev *dev) | |||
| 319 | 323 | ||
| 320 | BUG_ON(!dev); | 324 | BUG_ON(!dev); |
| 321 | 325 | ||
| 322 | pr_err("kfd: starting kernel queue test\n"); | 326 | pr_err("amdkfd: starting kernel queue test\n"); |
| 323 | 327 | ||
| 324 | kq = kernel_queue_init(dev, KFD_QUEUE_TYPE_HIQ); | 328 | kq = kernel_queue_init(dev, KFD_QUEUE_TYPE_HIQ); |
| 325 | BUG_ON(!kq); | 329 | BUG_ON(!kq); |
| @@ -330,7 +334,7 @@ static __attribute__((unused)) void test_kq(struct kfd_dev *dev) | |||
| 330 | buffer[i] = kq->nop_packet; | 334 | buffer[i] = kq->nop_packet; |
| 331 | kq->ops.submit_packet(kq); | 335 | kq->ops.submit_packet(kq); |
| 332 | 336 | ||
| 333 | pr_err("kfd: ending kernel queue test\n"); | 337 | pr_err("amdkfd: ending kernel queue test\n"); |
| 334 | } | 338 | } |
| 335 | 339 | ||
| 336 | 340 | ||
