aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0250-drm-amdkfd-make-reset-wavefronts-per-process-per-dev.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0250-drm-amdkfd-make-reset-wavefronts-per-process-per-dev.patch')
-rw-r--r--common/recipes-kernel/linux/files/0250-drm-amdkfd-make-reset-wavefronts-per-process-per-dev.patch142
1 files changed, 0 insertions, 142 deletions
diff --git a/common/recipes-kernel/linux/files/0250-drm-amdkfd-make-reset-wavefronts-per-process-per-dev.patch b/common/recipes-kernel/linux/files/0250-drm-amdkfd-make-reset-wavefronts-per-process-per-dev.patch
deleted file mode 100644
index 925b6947..00000000
--- a/common/recipes-kernel/linux/files/0250-drm-amdkfd-make-reset-wavefronts-per-process-per-dev.patch
+++ /dev/null
@@ -1,142 +0,0 @@
-From a82918f18a846e4e2be8613029d03c3cb3e99460 Mon Sep 17 00:00:00 2001
-From: Ben Goz <ben.goz@amd.com>
-Date: Wed, 25 Mar 2015 13:12:20 +0200
-Subject: [PATCH 0250/1050] drm/amdkfd: make reset wavefronts per process per
- device
-
-This commit moves the reset wavefront flag to per process per device
-data structure, so we can support multiple devices.
-
-Signed-off-by: Ben Goz <ben.goz@amd.com>
-Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
----
- .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 7 ++++---
- drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 10 +++++-----
- drivers/gpu/drm/amd/amdkfd/kfd_process.c | 21 ++++++++++++++++-----
- 3 files changed, 25 insertions(+), 13 deletions(-)
-
-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 547b0a5..4bb7f42 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
-@@ -946,7 +946,7 @@ static int destroy_queues_cpsch(struct device_queue_manager *dqm,
- {
- int retval;
- enum kfd_preempt_type_filter preempt_type;
-- struct kfd_process *p;
-+ struct kfd_process_device *pdd;
-
- BUG_ON(!dqm);
-
-@@ -981,8 +981,9 @@ static int destroy_queues_cpsch(struct device_queue_manager *dqm,
- retval = amdkfd_fence_wait_timeout(dqm->fence_addr, KFD_FENCE_COMPLETED,
- QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS);
- if (retval != 0) {
-- p = kfd_get_process(current);
-- p->reset_wavefronts = true;
-+ pdd = kfd_get_process_device_data(dqm->dev,
-+ kfd_get_process(current));
-+ pdd->reset_wavefronts = true;
- goto out;
- }
- pm_release_ib(&dqm->packets);
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-index cb79046..d0d5f4b 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-@@ -463,6 +463,11 @@ struct kfd_process_device {
-
- /* Is this process/pasid bound to this device? (amd_iommu_bind_pasid) */
- bool bound;
-+
-+ /* This flag tells if we should reset all
-+ * wavefronts on process termination
-+ */
-+ bool reset_wavefronts;
- };
-
- #define qpd_to_pdd(x) container_of(x, struct kfd_process_device, qpd)
-@@ -519,11 +524,6 @@ struct kfd_process {
- event_pages */
- u32 next_nonsignal_event_id;
- size_t signal_event_count;
-- /*
-- * This flag tells if we should reset all wavefronts on
-- * process termination
-- */
-- bool reset_wavefronts;
- };
-
- /**
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-index 56b904f..8a1f999 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-@@ -173,7 +173,7 @@ static void kfd_process_wq_release(struct work_struct *work)
- pr_debug("Releasing pdd (topology id %d) for process (pasid %d) in workqueue\n",
- pdd->dev->id, p->pasid);
-
-- if (p->reset_wavefronts)
-+ if (pdd->reset_wavefronts)
- dbgdev_wave_reset_wavefronts(pdd->dev, p);
-
- amd_iommu_unbind_pasid(pdd->dev->pdev, p->pasid);
-@@ -222,6 +222,7 @@ static void kfd_process_notifier_release(struct mmu_notifier *mn,
- struct mm_struct *mm)
- {
- struct kfd_process *p;
-+ struct kfd_process_device *pdd = NULL;
-
- /*
- * The kfd_process structure can not be free because the
-@@ -240,6 +241,15 @@ static void kfd_process_notifier_release(struct mmu_notifier *mn,
- /* In case our notifier is called before IOMMU notifier */
- pqm_uninit(&p->pqm);
-
-+ /* Iterate over all process device data structure and check
-+ * if we should reset all wavefronts */
-+ list_for_each_entry(pdd, &p->per_device_data, per_device_list)
-+ if (pdd->reset_wavefronts) {
-+ pr_warn("amdkfd: Resetting all wave fronts\n");
-+ dbgdev_wave_reset_wavefronts(pdd->dev, p);
-+ pdd->reset_wavefronts = false;
-+ }
-+
- mutex_unlock(&p->mutex);
-
- /*
-@@ -305,8 +315,6 @@ static struct kfd_process *create_process(const struct task_struct *thread)
- if (kfd_init_apertures(process) != 0)
- goto err_init_apretures;
-
-- process->reset_wavefronts = false;
--
- return process;
-
- err_init_apretures:
-@@ -348,6 +356,7 @@ struct kfd_process_device *kfd_create_process_device_data(struct kfd_dev *dev,
- INIT_LIST_HEAD(&pdd->qpd.queues_list);
- INIT_LIST_HEAD(&pdd->qpd.priv_queue_list);
- pdd->qpd.dqm = dev->dqm;
-+ pdd->reset_wavefronts = false;
- list_add(&pdd->per_device_list, &p->per_device_data);
- }
-
-@@ -409,10 +418,12 @@ void kfd_unbind_process_from_device(struct kfd_dev *dev, unsigned int pasid)
- kfd_dbgmgr_destroy(dev->dbgmgr);
-
- pqm_uninit(&p->pqm);
-- if (p->reset_wavefronts)
-- dbgdev_wave_reset_wavefronts(dev, p);
-
- pdd = kfd_get_process_device_data(dev, p);
-+ if (pdd->reset_wavefronts) {
-+ dbgdev_wave_reset_wavefronts(pdd->dev, p);
-+ pdd->reset_wavefronts = false;
-+ }
-
- /*
- * Just mark pdd as unbound, because we still need it to call
---
-1.9.1
-