aboutsummaryrefslogtreecommitdiffstats
path: root/meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5708-drm-amdkfd-Release-an-acquired-process-vm.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5708-drm-amdkfd-Release-an-acquired-process-vm.patch')
-rw-r--r--meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5708-drm-amdkfd-Release-an-acquired-process-vm.patch177
1 files changed, 0 insertions, 177 deletions
diff --git a/meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5708-drm-amdkfd-Release-an-acquired-process-vm.patch b/meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5708-drm-amdkfd-Release-an-acquired-process-vm.patch
deleted file mode 100644
index 680a3531..00000000
--- a/meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5708-drm-amdkfd-Release-an-acquired-process-vm.patch
+++ /dev/null
@@ -1,177 +0,0 @@
-From f7766c20130673e6490a69c7ca3b76dda524f201 Mon Sep 17 00:00:00 2001
-From: Chaudhary Amit Kumar <chaudharyamit.kumar@amd.com>
-Date: Mon, 7 Jan 2019 16:39:15 +0530
-Subject: [PATCH 5708/5725] drm/amdkfd: Release an acquired process vm
-
-For compute vm acquired from amdgpu, vm.pasid is managed
-by kfd. Decouple pasid from such vm on process destroy
-to avoid duplicate pasid release.
-
-Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
-Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-Signed-off-by: Chaudhary Amit Kumar <chaudharyamit.kumar@amd.com>
----
- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 1 +
- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 1 +
- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 1 +
- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c | 1 +
- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 19 +++++++++++++++++++
- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 20 ++++++++++++++++++++
- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 1 +
- drivers/gpu/drm/amd/amdkfd/kfd_process.c | 4 +++-
- drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 1 +
- 9 files changed, 48 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
-index f9d21a6..7ffeb38 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
-@@ -179,6 +179,7 @@ int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct kgd_dev *kgd,
- void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
- struct amdgpu_vm *vm);
- void amdgpu_amdkfd_gpuvm_destroy_process_vm(struct kgd_dev *kgd, void *vm);
-+void amdgpu_amdkfd_gpuvm_release_process_vm(struct kgd_dev *kgd, void *vm);
- uint64_t amdgpu_amdkfd_gpuvm_get_process_page_dir(void *vm);
- int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
- struct kgd_dev *kgd, uint64_t va, uint64_t size,
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
-index ef482bc..29de7a7 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
-@@ -182,6 +182,7 @@ static const struct kfd2kgd_calls kfd2kgd = {
- .create_process_vm = amdgpu_amdkfd_gpuvm_create_process_vm,
- .acquire_process_vm = amdgpu_amdkfd_gpuvm_acquire_process_vm,
- .destroy_process_vm = amdgpu_amdkfd_gpuvm_destroy_process_vm,
-+ .release_process_vm = amdgpu_amdkfd_gpuvm_release_process_vm,
- .get_process_page_dir = amdgpu_amdkfd_gpuvm_get_process_page_dir,
- .alloc_pasid = amdgpu_pasid_alloc,
- .free_pasid = amdgpu_pasid_free,
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
-index e6cfa22..9388f6a 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
-@@ -154,6 +154,7 @@ static const struct kfd2kgd_calls kfd2kgd = {
- .create_process_vm = amdgpu_amdkfd_gpuvm_create_process_vm,
- .acquire_process_vm = amdgpu_amdkfd_gpuvm_acquire_process_vm,
- .destroy_process_vm = amdgpu_amdkfd_gpuvm_destroy_process_vm,
-+ .release_process_vm = amdgpu_amdkfd_gpuvm_release_process_vm,
- .create_process_gpumem = create_process_gpumem,
- .destroy_process_gpumem = destroy_process_gpumem,
- .get_process_page_dir = amdgpu_amdkfd_gpuvm_get_process_page_dir,
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
-index eee3a3e..0409867 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
-@@ -204,6 +204,7 @@ static const struct kfd2kgd_calls kfd2kgd = {
- .create_process_vm = amdgpu_amdkfd_gpuvm_create_process_vm,
- .acquire_process_vm = amdgpu_amdkfd_gpuvm_acquire_process_vm,
- .destroy_process_vm = amdgpu_amdkfd_gpuvm_destroy_process_vm,
-+ .release_process_vm = amdgpu_amdkfd_gpuvm_release_process_vm,
- .create_process_gpumem = create_process_gpumem,
- .destroy_process_gpumem = destroy_process_gpumem,
- .get_process_page_dir = amdgpu_amdkfd_gpuvm_get_process_page_dir,
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
-index 1fd2b33..c8c00b4 100755
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
-@@ -1160,6 +1160,25 @@ void amdgpu_amdkfd_gpuvm_destroy_process_vm(struct kgd_dev *kgd, void *vm)
- kfree(vm);
- }
-
-+void amdgpu_amdkfd_gpuvm_release_process_vm(struct kgd_dev *kgd, void *vm)
-+{
-+ struct amdgpu_device *adev = get_amdgpu_device(kgd);
-+ struct amdgpu_vm *avm = (struct amdgpu_vm *)vm;
-+
-+ if (WARN_ON(!kgd || !vm))
-+ return;
-+
-+ pr_debug("Releasing process vm %p\n", vm);
-+
-+ /* The original pasid of amdgpu vm has already been
-+ * released during making a amdgpu vm to a compute vm
-+ * The current pasid is managed by kfd and will be
-+ * released on kfd process destroy. Set amdgpu pasid
-+ * to 0 to avoid duplicate release.
-+ */
-+ amdgpu_vm_release_compute(adev, avm);
-+}
-+
- uint64_t amdgpu_amdkfd_gpuvm_get_process_page_dir(void *vm)
- {
- struct amdgpu_vm *avm = (struct amdgpu_vm *)vm;
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
-index 50d5fa3..ef4f121 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
-@@ -868,6 +868,26 @@ int amdgpu_vm_alloc_pts(struct amdgpu_device *adev,
- }
-
- /**
-+ * amdgpu_vm_release_compute - release a compute vm
-+ * @adev: amdgpu_device pointer
-+ * @vm: a vm turned into compute vm by calling amdgpu_vm_make_compute
-+ *
-+ * This is a correspondant of amdgpu_vm_make_compute. It decouples compute
-+ * pasid from vm. Compute should stop use of vm after this call.
-+ */
-+void amdgpu_vm_release_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm)
-+{
-+ if (vm->pasid) {
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&adev->vm_manager.pasid_lock, flags);
-+ idr_remove(&adev->vm_manager.pasid_idr, vm->pasid);
-+ spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags);
-+ }
-+ vm->pasid = 0;
-+}
-+
-+/**
- * amdgpu_vm_free_pts - free PD/PT levels
- *
- * @adev: amdgpu device structure
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
-index ff711a4..233741f 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
-@@ -290,6 +290,7 @@ void amdgpu_vm_manager_fini(struct amdgpu_device *adev);
- int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
- int vm_context, unsigned int pasid);
- int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm, unsigned int pasid);
-+void amdgpu_vm_release_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm);
- void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm);
- bool amdgpu_vm_pasid_fault_credit(struct amdgpu_device *adev,
- unsigned int pasid);
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-index 73a1adc..304c116 100755
---- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-@@ -353,8 +353,10 @@ static void kfd_process_destroy_pdds(struct kfd_process *p)
- pr_debug("Releasing pdd (topology id %d) for process (pasid %d)\n",
- pdd->dev->id, p->pasid);
-
-- if (pdd->drm_file)
-+ if (pdd->drm_file) {
-+ pdd->dev->kfd2kgd->release_process_vm(pdd->dev->kgd, pdd->vm);
- fput(pdd->drm_file);
-+ }
- else if (pdd->vm)
- pdd->dev->kfd2kgd->destroy_process_vm(
- pdd->dev->kgd, pdd->vm);
-diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
-index 88dbade..20b403a 100755
---- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
-+++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
-@@ -276,6 +276,7 @@ struct kfd2kgd_calls {
- unsigned int pasid, void **vm, void **process_info,
- struct dma_fence **ef);
- void (*destroy_process_vm)(struct kgd_dev *kgd, void *vm);
-+ void (*release_process_vm)(struct kgd_dev *kgd, void *vm);
-
- int (*create_process_gpumem)(struct kgd_dev *kgd, uint64_t va, size_t size, void *vm, struct kgd_mem **mem);
- void (*destroy_process_gpumem)(struct kgd_dev *kgd, struct kgd_mem *mem);
---
-2.7.4
-