aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1350-drm-amdgpu-Share-eviction-fence-with-KFD.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1350-drm-amdgpu-Share-eviction-fence-with-KFD.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1350-drm-amdgpu-Share-eviction-fence-with-KFD.patch97
1 files changed, 0 insertions, 97 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1350-drm-amdgpu-Share-eviction-fence-with-KFD.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1350-drm-amdgpu-Share-eviction-fence-with-KFD.patch
deleted file mode 100644
index 1c077785..00000000
--- a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1350-drm-amdgpu-Share-eviction-fence-with-KFD.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-From 2a8a7db7857985c15f0fcd0949fb1e3a4c1820bb Mon Sep 17 00:00:00 2001
-From: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
-Date: Wed, 8 Nov 2017 15:36:47 -0500
-Subject: [PATCH 1350/4131] drm/amdgpu: Share eviction fence with KFD
-
-Currently, when TTM wants to evict a process BO,
-dma_fence_ops.enable_signaling() calls KFD call back function
-evict_and_restore_process(fence *eviction_fence) to prepare for
-eviction. This function starts a worker thread that handles suspending
-the process and signaling the eviction fence.
-
-However, during suspend / resume, KFD cannot reliably depend on this
-eviction sequence. This change is necessary to handle suspend / resume
-sequence by KFD.
-
-Change-Id: I342e64a4986225246d8fff21b9c96f2c844648ad
-Signed-off-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
----
- drivers/gpu/drm/amd/amdkfd/kfd_device.c | 11 ++++++++++-
- drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 5 +++++
- drivers/gpu/drm/amd/amdkfd/kfd_process.c | 6 ++++--
- 3 files changed, 19 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
-index 6f5f93c..232e713 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
-@@ -945,7 +945,7 @@ void kfd_restore_bo_worker(struct work_struct *work)
- */
-
- p->last_restore_timestamp = get_jiffies_64();
-- ret = pdd->dev->kfd2kgd->restore_process_bos(p->process_info);
-+ ret = pdd->dev->kfd2kgd->restore_process_bos(p->process_info, &p->ef);
- if (ret) {
- pr_info("Restore failed, try again after %d ms\n",
- PROCESS_BACK_OFF_TIME_MS);
-@@ -1049,6 +1049,15 @@ void kfd_evict_bo_worker(struct work_struct *work)
- ret = quiesce_process_mm(p);
- if (!ret) {
- dma_fence_signal(eviction_work->quiesce_fence);
-+ WARN_ONCE(eviction_work->quiesce_fence != p->ef,
-+ "Eviction fence mismatch\n");
-+ dma_fence_put(p->ef);
-+ /* TODO: quiesce_fence is same as kfd_process->ef. But
-+ * quiesce_fence is also used to avoid starting multiple
-+ * eviction work items. This might not be necessary and
-+ * one of the variables could be removed
-+ */
-+ p->ef = NULL;
- schedule_delayed_work(&p->restore_work,
- msecs_to_jiffies(PROCESS_RESTORE_TIME_MS));
- } else
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-index fc2936b..851d1f5 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-@@ -730,6 +730,11 @@ struct kfd_process {
-
- /* Information used for memory eviction */
- void *process_info;
-+ /* Eviction fence that is attached to all the BOs of this process. The
-+ * fence will be triggered during eviction and new one will be created
-+ * during restore
-+ */
-+ struct dma_fence *ef;
-
- /* Work items for evicting and restoring BOs */
- struct kfd_eviction_work eviction_work;
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-index 4080ac0..7271a08 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-@@ -360,9 +360,11 @@ static void kfd_process_destroy_pdds(struct kfd_process *p)
- per_device_list) {
- kfd_flush_tlb(pdd->dev, p->pasid);
- /* Destroy the GPUVM VM context */
-- if (pdd->vm)
-+ if (pdd->vm) {
-+ dma_fence_put(p->ef);
- pdd->dev->kfd2kgd->destroy_process_vm(
- pdd->dev->kgd, pdd->vm);
-+ }
- list_del(&pdd->per_device_list);
-
- if (pdd->qpd.cwsr_pages) {
-@@ -724,7 +726,7 @@ struct kfd_process_device *kfd_create_process_device_data(struct kfd_dev *dev,
-
- /* Create the GPUVM context for this specific device */
- if (dev->kfd2kgd->create_process_vm(dev->kgd, &pdd->vm,
-- &p->process_info)) {
-+ &p->process_info, &p->ef)) {
- pr_err("Failed to create process VM object\n");
- goto err_create_pdd;
- }
---
-2.7.4
-