aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1341-Revert-drm-amdkfd-Workaround-for-debug-event-not-sig.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1341-Revert-drm-amdkfd-Workaround-for-debug-event-not-sig.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1341-Revert-drm-amdkfd-Workaround-for-debug-event-not-sig.patch213
1 files changed, 0 insertions, 213 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1341-Revert-drm-amdkfd-Workaround-for-debug-event-not-sig.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1341-Revert-drm-amdkfd-Workaround-for-debug-event-not-sig.patch
deleted file mode 100644
index e6108eba..00000000
--- a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1341-Revert-drm-amdkfd-Workaround-for-debug-event-not-sig.patch
+++ /dev/null
@@ -1,213 +0,0 @@
-From d0b9a0151ac56808b845877b079bdead9f325c43 Mon Sep 17 00:00:00 2001
-From: Felix Kuehling <Felix.Kuehling@amd.com>
-Date: Sat, 30 Sep 2017 18:02:44 -0400
-Subject: [PATCH 1341/4131] Revert "drm/amdkfd: Workaround for debug event not
- signaling"
-
-This reverts commit 27cef962aa8104b83048aa7fe8b3bc9df5f903e8.
-
-This workaround is no longer needed. Reverting it makes upstreaming
-easier and will allow for more efficient event processing in the
-interrupt handler (by using all 12 bits of the event ID).
-
-Change-Id: I65ae43c584d9af50094020e52a77e181fc59bbe5
-Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
----
- drivers/gpu/drm/amd/amdkfd/kfd_events.c | 108 ++++----------------------------
- drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 2 -
- 2 files changed, 12 insertions(+), 98 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
-index c345c50..f565530 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
-@@ -82,15 +82,9 @@ struct signal_page {
- * For SQ s_sendmsg interrupts, this is limited to 8 bits.
- */
-
--#define INTERRUPT_DATA_BITS 8
-+#define INTERRUPT_DATA_BITS 12
- #define SIGNAL_EVENT_ID_SLOT_SHIFT 0
-
--/* We can only create 8 debug events */
--
--#define KFD_DEBUG_EVENT_LIMIT 8
--#define KFD_DEBUG_EVENT_MASK 0x1F
--#define KFD_DEBUG_EVENT_SHIFT 5
--
- static uint64_t *page_slots(struct signal_page *page)
- {
- return page->kernel_address;
-@@ -136,8 +130,6 @@ static bool allocate_signal_page(struct file *devkfd, struct kfd_process *p)
- {
- void *backing_store;
- struct signal_page *page;
-- unsigned int slot;
-- int i;
-
- page = kzalloc(sizeof(*page), GFP_KERNEL);
- if (!page)
-@@ -156,14 +148,6 @@ static bool allocate_signal_page(struct file *devkfd, struct kfd_process *p)
-
- page->kernel_address = backing_store;
-
-- /* Set bits of debug events to prevent allocation */
-- for (i = 0 ; i < KFD_DEBUG_EVENT_LIMIT ; i++) {
-- slot = (i << KFD_DEBUG_EVENT_SHIFT) |
-- KFD_DEBUG_EVENT_MASK;
-- __set_bit(slot, page->used_slot_bitmap);
-- page->free_slots--;
-- }
--
- if (list_empty(&p->signal_event_pages))
- page->page_index = 0;
- else
-@@ -249,39 +233,6 @@ void kfd_free_signal_page_dgpu(struct kfd_process *p, uint64_t handle)
- }
- }
-
--static bool allocate_debug_event_notification_slot(struct file *devkfd,
-- struct kfd_process *p,
-- struct signal_page **out_page,
-- unsigned int *out_slot_index)
--{
-- struct signal_page *page;
-- unsigned int slot;
-- bool ret;
--
-- if (list_empty(&p->signal_event_pages)) {
-- ret = allocate_signal_page(devkfd, p);
-- if (!ret)
-- return ret;
-- }
--
-- page = list_entry((&p->signal_event_pages)->next, struct signal_page,
-- event_pages);
-- slot = (p->debug_event_count << KFD_DEBUG_EVENT_SHIFT) |
-- KFD_DEBUG_EVENT_MASK;
--
-- pr_debug("page == %p\n", page);
-- pr_debug("slot == %d\n", slot);
--
-- page_slots(page)[slot] = UNSIGNALED_EVENT_SLOT;
-- *out_page = page;
-- *out_slot_index = slot;
--
-- pr_debug("Allocated debug event signal slot in page %p, slot %d\n",
-- page, slot);
--
-- return true;
--}
--
- /* Assumes that the process's event_mutex is locked. */
- static void release_event_notification_slot(struct signal_page *page,
- size_t slot_index)
-@@ -393,47 +344,22 @@ static int create_signal_event(struct file *devkfd,
- struct kfd_process *p,
- struct kfd_event *ev)
- {
-- if ((ev->type == KFD_EVENT_TYPE_SIGNAL) &&
-- (p->signal_event_count == KFD_SIGNAL_EVENT_LIMIT)) {
-+ 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;
- }
- return -ENOMEM;
-- } else if ((ev->type == KFD_EVENT_TYPE_DEBUG) &&
-- (p->debug_event_count == KFD_DEBUG_EVENT_LIMIT)) {
-- if (!p->debug_event_limit_reached) {
-- pr_warn("Debug event wasn't created because limit was reached\n");
-- p->debug_event_limit_reached = true;
-- }
-- return -ENOMEM;
- }
-
-- if (ev->type == KFD_EVENT_TYPE_SIGNAL) {
-- if (!allocate_event_notification_slot(devkfd, p,
-- &ev->signal_page,
-- &ev->signal_slot_index)) {
-- pr_warn("Signal event wasn't created because out of kernel memory\n");
-- return -ENOMEM;
-- }
--
-- p->signal_event_count++;
--
-- if ((p->signal_event_count & KFD_DEBUG_EVENT_MASK) ==
-- KFD_DEBUG_EVENT_MASK)
-- p->signal_event_count++;
--
-- } else if (ev->type == KFD_EVENT_TYPE_DEBUG) {
-- if (!allocate_debug_event_notification_slot(devkfd, p,
-- &ev->signal_page,
-- &ev->signal_slot_index)) {
-- pr_warn("Debug event wasn't created because out of kernel memory\n");
-- return -ENOMEM;
-- }
--
-- p->debug_event_count++;
-+ if (!allocate_event_notification_slot(devkfd, p, &ev->signal_page,
-+ &ev->signal_slot_index)) {
-+ pr_warn("Signal event wasn't created because out of kernel memory\n");
-+ return -ENOMEM;
- }
-
-+ p->signal_event_count++;
-+
- ev->user_signal_address =
- &ev->signal_page->user_address[ev->signal_slot_index];
-
-@@ -468,22 +394,14 @@ void kfd_event_init_process(struct kfd_process *p)
- INIT_LIST_HEAD(&p->signal_event_pages);
- p->next_nonsignal_event_id = KFD_FIRST_NONSIGNAL_EVENT_ID;
- p->signal_event_count = 0;
-- p->debug_event_count = 0;
- }
-
- static void destroy_event(struct kfd_process *p, struct kfd_event *ev)
- {
- if (ev->signal_page) {
-- if (ev->type == KFD_EVENT_TYPE_SIGNAL) {
-- release_event_notification_slot(ev->signal_page,
-- ev->signal_slot_index);
-- p->signal_event_count--;
-- if ((p->signal_event_count & KFD_DEBUG_EVENT_MASK) ==
-- KFD_DEBUG_EVENT_MASK)
-- p->signal_event_count--;
-- } else if (ev->type == KFD_EVENT_TYPE_DEBUG) {
-- p->debug_event_count--;
-- }
-+ release_event_notification_slot(ev->signal_page,
-+ ev->signal_slot_index);
-+ p->signal_event_count--;
- }
-
- /*
-@@ -719,9 +637,7 @@ void kfd_signal_event_interrupt(unsigned int pasid, uint32_t partial_id,
-
- mutex_lock(&p->event_mutex);
-
-- if ((valid_id_bits >= INTERRUPT_DATA_BITS) &&
-- ((partial_id & KFD_DEBUG_EVENT_MASK) ==
-- KFD_DEBUG_EVENT_MASK)) {
-+ if (valid_id_bits >= INTERRUPT_DATA_BITS) {
- /* Partial ID is a full ID. */
- ev = lookup_event_by_id(p, partial_id);
- set_event_from_interrupt(p, ev);
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-index b63e25d..c853956 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-@@ -719,9 +719,7 @@ struct kfd_process {
- struct list_head signal_event_pages;
- u32 next_nonsignal_event_id;
- size_t signal_event_count;
-- size_t debug_event_count;
- bool signal_event_limit_reached;
-- bool debug_event_limit_reached;
-
- struct rb_root bo_interval_tree;
-
---
-2.7.4
-