aboutsummaryrefslogtreecommitdiffstats
path: root/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1186-drm-amdkfd-Clean-up-the-function-pqm_uninit.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1186-drm-amdkfd-Clean-up-the-function-pqm_uninit.patch')
-rw-r--r--meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1186-drm-amdkfd-Clean-up-the-function-pqm_uninit.patch138
1 files changed, 0 insertions, 138 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1186-drm-amdkfd-Clean-up-the-function-pqm_uninit.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1186-drm-amdkfd-Clean-up-the-function-pqm_uninit.patch
deleted file mode 100644
index b7dafc84..00000000
--- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1186-drm-amdkfd-Clean-up-the-function-pqm_uninit.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-From 57b26c96c876609d40de87c5fa05399bfe9c253b Mon Sep 17 00:00:00 2001
-From: Yong Zhao <yong.zhao@amd.com>
-Date: Wed, 7 Sep 2016 19:43:02 -0400
-Subject: [PATCH 1186/4131] drm/amdkfd: Clean up the function pqm_uninit()
-
-Split process termination part of pqm_uninit() into a separate function
-kfd_process_dequeue_from_all_devices(), which makes the logic clearer.
-
-Change-Id: Ibfe929c48b2d3812bb1e196d3444d22d2565ac0e
-Signed-off-by: Yong Zhao <yong.zhao@amd.com>
-
- Conflicts:
- drivers/gpu/drm/amd/amdkfd/kfd_process.c
----
- drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 2 +
- drivers/gpu/drm/amd/amdkfd/kfd_process.c | 9 +----
- .../gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 47 +++++++++++++---------
- 3 files changed, 31 insertions(+), 27 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-index f4c7bac..dff388e 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-@@ -820,6 +820,8 @@ struct process_queue_node {
- struct list_head process_queue_list;
- };
-
-+void kfd_process_dequeue_from_device(struct kfd_process_device *pdd);
-+void kfd_process_dequeue_from_all_devices(struct kfd_process *p);
- int pqm_init(struct process_queue_manager *pqm, struct kfd_process *p);
- void pqm_uninit(struct process_queue_manager *pqm);
- int pqm_create_queue(struct process_queue_manager *pqm,
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-index cd33ffc..d65dbc5 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-@@ -536,24 +536,19 @@ static void kfd_process_notifier_release(struct mmu_notifier *mn,
- mutex_unlock(get_dbgmgr_mutex());
- }
-
-+ kfd_process_dequeue_from_all_devices(p);
-
- /* now we can uninit the pqm: */
--
- pqm_uninit(&p->pqm);
-
- /* Iterate over all process device data structure and check
-- * if we should delete debug managers and reset all wavefronts
-+ * if we should delete debug managers
- */
- list_for_each_entry(pdd, &p->per_device_data, per_device_list) {
- if ((pdd->dev->dbgmgr) &&
- (pdd->dev->dbgmgr->pasid == p->pasid))
- kfd_dbgmgr_destroy(pdd->dev->dbgmgr);
-
-- if (pdd->reset_wavefronts) {
-- pr_warn("amdkfd: Resetting all wave fronts\n");
-- dbgdev_wave_reset_wavefronts(pdd->dev, p);
-- pdd->reset_wavefronts = false;
-- }
- }
-
- /* Indicate to other users that MM is no longer valid */
-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 b68776e..46d0d93 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
-@@ -70,6 +70,33 @@ static int find_available_queue_slot(struct process_queue_manager *pqm,
- return 0;
- }
-
-+void kfd_process_dequeue_from_device(struct kfd_process_device *pdd)
-+{
-+ struct kfd_dev *dev = pdd->dev;
-+ struct kfd_process *p = pdd->process;
-+ int retval;
-+
-+ retval = dev->dqm->ops.process_termination(dev->dqm, &pdd->qpd);
-+ /* Checking pdd->reset_wavefronts may not be needed, because
-+ * if reset_wavefronts was set to true before, which means unmapping
-+ * failed, process_termination should fail too until we reset
-+ * wavefronts. Now we put the check there to be safe.
-+ */
-+ if (retval || pdd->reset_wavefronts) {
-+ pr_warn("amdkfd: Resetting wave fronts on dev %p\n", dev);
-+ dbgdev_wave_reset_wavefronts(dev, p);
-+ pdd->reset_wavefronts = false;
-+ }
-+}
-+
-+void kfd_process_dequeue_from_all_devices(struct kfd_process *p)
-+{
-+ struct kfd_process_device *pdd;
-+
-+ list_for_each_entry(pdd, &p->per_device_data, per_device_list)
-+ kfd_process_dequeue_from_device(pdd);
-+}
-+
- int pqm_init(struct process_queue_manager *pqm, struct kfd_process *p)
- {
- BUG_ON(!pqm);
-@@ -87,33 +114,13 @@ int pqm_init(struct process_queue_manager *pqm, struct kfd_process *p)
-
- void pqm_uninit(struct process_queue_manager *pqm)
- {
-- int retval;
- struct process_queue_node *pqn, *next;
-- struct kfd_process_device *pdd;
-- struct kfd_dev *dev = NULL;
-
- BUG_ON(!pqm);
-
- pr_debug("In func %s\n", __func__);
-
- list_for_each_entry_safe(pqn, next, &pqm->queues, process_queue_list) {
-- if (pqn->q)
-- dev = pqn->q->device;
-- else if (pqn->kq)
-- dev = pqn->kq->dev;
-- else
-- BUG();
--
-- pdd = kfd_get_process_device_data(dev, pqm->process);
-- if (pdd) {
-- retval = dev->dqm->ops.process_termination
-- (dev->dqm, &pdd->qpd);
-- if (retval != 0)
-- pdd->reset_wavefronts = true;
-- }
-- }
--
-- list_for_each_entry_safe(pqn, next, &pqm->queues, process_queue_list) {
- uninit_queue(pqn->q);
- list_del(&pqn->process_queue_list);
- kfree(pqn);
---
-2.7.4
-