|
@@ -1114,6 +1114,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);
|
|
|
+}
|
|
|
+
|
|
|
uint32_t amdgpu_amdkfd_gpuvm_get_process_page_dir(void *vm)
|
|
|
{
|
|
|
struct amdgpu_vm *avm = (struct amdgpu_vm *)vm;
|