aboutsummaryrefslogtreecommitdiffstats
path: root/meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5641-drm-amdkfd-Implement-hw_exception-work-thread-to-han.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5641-drm-amdkfd-Implement-hw_exception-work-thread-to-han.patch')
-rw-r--r--meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5641-drm-amdkfd-Implement-hw_exception-work-thread-to-han.patch134
1 files changed, 0 insertions, 134 deletions
diff --git a/meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5641-drm-amdkfd-Implement-hw_exception-work-thread-to-han.patch b/meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5641-drm-amdkfd-Implement-hw_exception-work-thread-to-han.patch
deleted file mode 100644
index 4ef12c5c..00000000
--- a/meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5641-drm-amdkfd-Implement-hw_exception-work-thread-to-han.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From 020476b4cb6f58460cee35a7cc946776ba396a9d Mon Sep 17 00:00:00 2001
-From: Shaoyun Liu <Shaoyun.Liu@amd.com>
-Date: Thu, 5 Apr 2018 15:01:40 -0400
-Subject: [PATCH 5641/5725] drm/amdkfd: Implement hw_exception work thread to
- handle hws hang
-
-Change-Id: I021fe1e875baa4242c5347e02559a414937dfa96
-Signed-off-by: Shaoyun Liu <Shaoyun.Liu@amd.com>
-Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
----
- drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 4 +---
- .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 22 +++++++++++++++++++++-
- .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.h | 4 ++++
- 3 files changed, 26 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
-index 4953374..17ca06d 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
-@@ -137,10 +137,8 @@ static int kfd_open(struct inode *inode, struct file *filep)
- if (IS_ERR(process))
- return PTR_ERR(process);
-
-- if (kfd_is_locked()) {
-- kfd_unref_process(process);
-+ if (kfd_is_locked())
- return -EAGAIN;
-- }
-
- dev_dbg(kfd_device, "process %d opened, compat mode (32 bit) - %d\n",
- process->pasid, process->is_32bit_user_mode);
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
-index b0c159a..82c7dbe 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
-@@ -60,6 +60,8 @@ static int create_sdma_queue_nocpsch(struct device_queue_manager *dqm,
- static void deallocate_sdma_queue(struct device_queue_manager *dqm,
- unsigned int sdma_queue_id);
-
-+static void kfd_process_hw_exception(struct work_struct *work);
-+
- static inline
- enum KFD_MQD_TYPE get_mqd_type_from_queue_type(enum kfd_queue_type type)
- {
-@@ -1021,6 +1023,8 @@ static int initialize_cpsch(struct device_queue_manager *dqm)
- dqm->active_runlist = false;
- dqm->sdma_bitmap = (1 << get_num_sdma_queues(dqm)) - 1;
-
-+ INIT_WORK(&dqm->hw_exception_work, kfd_process_hw_exception);
-+
- return 0;
- }
-
-@@ -1053,6 +1057,8 @@ static int start_cpsch(struct device_queue_manager *dqm)
- init_interrupts(dqm);
-
- mutex_lock(&dqm->lock);
-+ /* clear hang status when driver try to start the hw scheduler */
-+ dqm->is_hws_hang = false;
- execute_queues_cpsch(dqm, KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0);
- mutex_unlock(&dqm->lock);
-
-@@ -1268,6 +1274,8 @@ static int unmap_queues_cpsch(struct device_queue_manager *dqm,
- {
- int retval = 0;
-
-+ if (dqm->is_hws_hang)
-+ return -EIO;
- if (!dqm->active_runlist)
- return retval;
-
-@@ -1306,9 +1314,13 @@ static int execute_queues_cpsch(struct device_queue_manager *dqm,
- {
- int retval;
-
-+ if (dqm->is_hws_hang)
-+ return -EIO;
- retval = unmap_queues_cpsch(dqm, filter, filter_param);
- if (retval) {
- pr_err("The cp might be in an unrecoverable state due to an unsuccessful queues preemption\n");
-+ dqm->is_hws_hang = true;
-+ schedule_work(&dqm->hw_exception_work);
- return retval;
- }
-
-@@ -1590,7 +1602,7 @@ static int process_termination_cpsch(struct device_queue_manager *dqm,
- }
-
- retval = execute_queues_cpsch(dqm, filter, 0);
-- if (retval || qpd->reset_wavefronts) {
-+ if ((!dqm->is_hws_hang) && (retval || qpd->reset_wavefronts)) {
- pr_warn("Resetting wave fronts (cpsch) on dev %p\n", dqm->dev);
- dbgdev_wave_reset_wavefronts(dqm->dev, qpd->pqm->process);
- qpd->reset_wavefronts = false;
-@@ -1611,6 +1623,7 @@ static int process_termination_cpsch(struct device_queue_manager *dqm,
-
- out:
- mutex_unlock(&dqm->lock);
-+
- return retval;
- }
-
-@@ -1744,6 +1757,13 @@ int kfd_process_vm_fault(struct device_queue_manager *dqm,
- return ret;
- }
-
-+static void kfd_process_hw_exception(struct work_struct *work)
-+{
-+ struct device_queue_manager *dqm = container_of(work,
-+ struct device_queue_manager, hw_exception_work);
-+ dqm->dev->kfd2kgd->gpu_recover(dqm->dev->kgd);
-+}
-+
- #if defined(CONFIG_DEBUG_FS)
-
- static void seq_reg_dump(struct seq_file *m,
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
-index 978458a..3f17e5e 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
-@@ -195,6 +195,10 @@ struct device_queue_manager {
- struct kfd_mem_obj *fence_mem;
- bool active_runlist;
- int sched_policy;
-+
-+ /* hw exception */
-+ bool is_hws_hang;
-+ struct work_struct hw_exception_work;
- };
-
- void device_queue_manager_init_cik(
---
-2.7.4
-