From 0725474af32b57860a9f33e6bc4ab1d063a2ff50 Mon Sep 17 00:00:00 2001 From: Sanjay R Mehta Date: Tue, 20 Feb 2018 14:32:01 +0530 Subject: [PATCH 1120/4131] Make to stock kfd driver Signed-off-by: Sanjay R Mehta --- drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 2 -- drivers/gpu/drm/amd/amdkfd/kfd_events.c | 5 +---- drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c | 22 +++++----------------- drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 1 - .../gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 1 + 5 files changed, 7 insertions(+), 24 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c index 8a05efa..abdafb9 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c @@ -893,8 +893,6 @@ static int kfd_ioctl_get_tile_config(struct file *filep, int err = 0; dev = kfd_device_by_id(args->gpu_id); - if (!dev) - return -EINVAL; dev->kfd2kgd->get_tile_config(dev->kgd, &config); diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c index 944abfa..5979158 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c @@ -292,10 +292,7 @@ static int create_signal_event(struct file *devkfd, struct kfd_event *ev) { if (p->signal_event_count == KFD_SIGNAL_EVENT_LIMIT) { - if (!p->signal_event_limit_reached) { - pr_warn("Signal event wasn't created because limit was reached\n"); - p->signal_event_limit_reached = true; - } + pr_warn("Signal event wasn't created because limit was reached\n"); return -ENOMEM; } diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c index ed71ad4..681b639 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c @@ -183,8 +183,8 @@ static void uninitialize(struct kernel_queue *kq) { if (kq->queue->properties.type == KFD_QUEUE_TYPE_HIQ) kq->mqd->destroy_mqd(kq->mqd, - kq->queue->mqd, - KFD_PREEMPT_TYPE_WAVEFRONT_RESET, + NULL, + false, QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS, kq->queue->pipe, kq->queue->queue); @@ -210,11 +210,6 @@ static int acquire_packet_buffer(struct kernel_queue *kq, uint32_t wptr, rptr; unsigned int *queue_address; - /* When rptr == wptr, the buffer is empty. - * When rptr == wptr + 1, the buffer is full. - * It is always rptr that advances to the position of wptr, rather than - * the opposite. So we can only use up to queue_size_dwords - 1 dwords. - */ rptr = *kq->rptr_kernel; wptr = *kq->wptr_kernel; queue_address = (unsigned int *)kq->pq_kernel_addr; @@ -224,10 +219,11 @@ static int acquire_packet_buffer(struct kernel_queue *kq, pr_debug("wptr: %d\n", wptr); pr_debug("queue_address 0x%p\n", queue_address); - available_size = (rptr + queue_size_dwords - 1 - wptr) % + available_size = (rptr - 1 - wptr + queue_size_dwords) % queue_size_dwords; - if (packet_size_in_dwords > available_size) { + if (packet_size_in_dwords >= queue_size_dwords || + packet_size_in_dwords >= available_size) { /* * make sure calling functions know * acquire_packet_buffer() failed @@ -237,14 +233,6 @@ static int acquire_packet_buffer(struct kernel_queue *kq, } if (wptr + packet_size_in_dwords >= queue_size_dwords) { - /* make sure after rolling back to position 0, there is - * still enough space. - */ - if (packet_size_in_dwords >= rptr) { - *buffer_ptr = NULL; - return -ENOMEM; - } - /* fill nops, roll back and start at position 0 */ while (wptr > 0) { queue_address[wptr] = kq->nop_packet; wptr = (wptr + 1) % queue_size_dwords; diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h index b87e96c..b397ec7 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h +++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h @@ -521,7 +521,6 @@ struct kfd_process { struct list_head signal_event_pages; u32 next_nonsignal_event_id; size_t signal_event_count; - bool signal_event_limit_reached; }; /** diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c index f9a1a4d..4142d63 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c @@ -143,6 +143,7 @@ int pqm_create_queue(struct process_queue_manager *pqm, int num_queues = 0; struct queue *cur; + memset(&q_properties, 0, sizeof(struct queue_properties)); memcpy(&q_properties, properties, sizeof(struct queue_properties)); q = NULL; kq = NULL; -- 2.7.4