diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1120-Make-to-stock-kfd-driver.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1120-Make-to-stock-kfd-driver.patch | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1120-Make-to-stock-kfd-driver.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1120-Make-to-stock-kfd-driver.patch new file mode 100644 index 00000000..66c5efd1 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1120-Make-to-stock-kfd-driver.patch @@ -0,0 +1,126 @@ +From 0725474af32b57860a9f33e6bc4ab1d063a2ff50 Mon Sep 17 00:00:00 2001 +From: Sanjay R Mehta <sanju.mehta@amd.com> +Date: Tue, 20 Feb 2018 14:32:01 +0530 +Subject: [PATCH 1120/4131] Make to stock kfd driver + +Signed-off-by: Sanjay R Mehta <sanju.mehta@amd.com> +--- + 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 + |