aboutsummaryrefslogtreecommitdiffstats
path: root/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1599-drm-amdkfd-Abandon-master-VM-usage.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1599-drm-amdkfd-Abandon-master-VM-usage.patch')
-rw-r--r--meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1599-drm-amdkfd-Abandon-master-VM-usage.patch621
1 files changed, 0 insertions, 621 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1599-drm-amdkfd-Abandon-master-VM-usage.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1599-drm-amdkfd-Abandon-master-VM-usage.patch
deleted file mode 100644
index 57026ee6..00000000
--- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1599-drm-amdkfd-Abandon-master-VM-usage.patch
+++ /dev/null
@@ -1,621 +0,0 @@
-From 62685d921d1bb9fce67791c48e348440880487e3 Mon Sep 17 00:00:00 2001
-From: Yong Zhao <yong.zhao@amd.com>
-Date: Fri, 16 Dec 2016 19:00:09 -0500
-Subject: [PATCH 1599/4131] drm/amdkfd: Abandon master VM usage
-
-The master VM design is prone to bugs, and sometimes misleading. A kfd
-process memory eviction structure amdkfd_eviction_info is used for
-the new design.
-
-Change-Id: If194af56203fe18b06d0c9c0273384454c5a1c36
-Signed-off-by: Yong Zhao <yong.zhao@amd.com>
-
- Conflicts:
- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
- drivers/gpu/drm/amd/amdkfd/kfd_device.c
----
- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 45 +++---
- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 175 +++++++++++++----------
- drivers/gpu/drm/amd/amdkfd/kfd_device.c | 4 +-
- drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 3 +-
- drivers/gpu/drm/amd/amdkfd/kfd_process.c | 4 +-
- drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 7 +-
- 6 files changed, 129 insertions(+), 109 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
-index 6476491..bbed772 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
-@@ -80,34 +80,37 @@ struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
- bool amd_kfd_fence_check_mm(struct fence *f, void *mm);
- struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct fence *f);
-
-+struct amdkfd_process_info {
-+ /* List head of all VMs that belong to a KFD process */
-+ struct list_head vm_list_head;
-+ /* List head for all KFD BOs that belong to a KFD process. */
-+ struct list_head kfd_bo_list;
-+ /* Lock to protect kfd_bo_list */
-+ struct mutex lock;
-+
-+ /* Number of VMs */
-+ unsigned int n_vms;
-+ /* Eviction Fence */
-+ struct amdgpu_amdkfd_fence *eviction_fence;
-+};
-+
- /* struct amdkfd_vm -
-- * For Memory Eviction KGD requires a mechanism to keep track of all KFD BOs
-+ * For Memory Eviction KGD requires a mechanism to keep track of all KFD BOs
- * belonging to a KFD process. All the VMs belonging to the same process point
-- * to the same master VM. The master VM points to itself.
-- * For master VM kfd_bo_list will contain the list of all KFD BOs and it will
-- * be empty for all the other VMs. The master VM is decided by KFD and it will
-- * pass it on KGD via create_process_vm interface
-+ * to the same amdkfd_process_info.
- */
- struct amdkfd_vm {
- /* Keep base as the first parameter for pointer compatibility between
- * amdkfd_vm and amdgpu_vm.
- */
- struct amdgpu_vm base;
-- /* Points to master VM of the KFD process */
-- struct amdkfd_vm *master;
-- /* List Head for all KFD BOs that belong to a KFD process. Non-empty
-- * only for Master VM.
-- */
-- struct list_head kfd_bo_list;
-- /* Lock to protect kfd_bo_list */
-- struct mutex lock;
-- /* List of VMs that belong to a KFD process */
-- struct list_head kfd_vm_list;
-- /* Number of VMs including master VM */
-- unsigned n_vms;
-+
-+ /* List node in amdkfd_process_info.vm_list_head*/
-+ struct list_head vm_list_node;
-+
- struct amdgpu_device *adev;
-- /* Eviction Fence. Initialized only for master_vm */
-- struct amdgpu_amdkfd_fence *eviction_fence;
-+ /* Points to the KFD process VM info*/
-+ struct amdkfd_process_info *process_info;
- };
-
- int amdgpu_amdkfd_init(void);
-@@ -133,7 +136,7 @@ void amdgpu_amdkfd_cancel_restore_mem(struct kgd_mem *mem);
- int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type engine,
- uint32_t vmid, uint64_t gpu_addr,
- uint32_t *ib_cmd, uint32_t ib_len);
--int amdgpu_amdkfd_gpuvm_restore_process_bos(void *master_vm);
-+int amdgpu_amdkfd_gpuvm_restore_process_bos(void *process_info);
- struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void);
- struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
- int amdgpu_amdkfd_copy_mem_to_mem(struct kgd_dev *kgd, struct kgd_mem *src_mem,
-@@ -177,7 +180,7 @@ int amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu(
- struct kgd_dev *kgd, struct kgd_mem *mem, void *vm);
-
- int amdgpu_amdkfd_gpuvm_create_process_vm(struct kgd_dev *kgd, void **vm,
-- void *master_vm);
-+ void **process_info);
- void amdgpu_amdkfd_gpuvm_destroy_process_vm(struct kgd_dev *kgd, void *vm);
-
- uint32_t amdgpu_amdkfd_gpuvm_get_process_page_dir(void *vm);
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
-index 7421062..294482f 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
-@@ -472,7 +472,7 @@ static int validate_pt_pd_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm)
- }
-
- static void add_kgd_mem_to_kfd_bo_list(struct kgd_mem *mem,
-- struct amdkfd_vm *kfd_vm)
-+ struct amdkfd_process_info *process_info)
- {
- struct amdgpu_bo_list_entry *entry = &mem->bo_list_entry;
- struct amdgpu_bo *bo = mem->bo;
-@@ -481,9 +481,9 @@ static void add_kgd_mem_to_kfd_bo_list(struct kgd_mem *mem,
- INIT_LIST_HEAD(&entry->tv.head);
- entry->tv.shared = true;
- entry->tv.bo = &bo->tbo;
-- mutex_lock(&kfd_vm->master->lock);
-- list_add_tail(&entry->tv.head, &kfd_vm->master->kfd_bo_list);
-- mutex_unlock(&kfd_vm->master->lock);
-+ mutex_lock(&process_info->lock);
-+ list_add_tail(&entry->tv.head, &process_info->kfd_bo_list);
-+ mutex_unlock(&process_info->lock);
- }
-
- static int __alloc_memory_of_gpu(struct kgd_dev *kgd, uint64_t va,
-@@ -610,7 +610,7 @@ static int __alloc_memory_of_gpu(struct kgd_dev *kgd, uint64_t va,
- (*mem)->va = va;
- (*mem)->domain = domain;
- (*mem)->mapped_to_gpu_memory = 0;
-- add_kgd_mem_to_kfd_bo_list(*mem, kfd_vm);
-+ add_kgd_mem_to_kfd_bo_list(*mem, kfd_vm->process_info);
-
- if (offset)
- *offset = amdgpu_bo_mmap_offset(bo);
-@@ -640,7 +640,7 @@ static int __alloc_memory_of_gpu(struct kgd_dev *kgd, uint64_t va,
- * GPUs). */
- struct bo_vm_reservation_context {
- struct amdgpu_bo_list_entry kfd_bo;
-- unsigned n_vms;
-+ unsigned int n_vms;
- struct amdgpu_bo_list_entry *vm_pd;
- struct ww_acquire_ctx ticket;
- struct list_head list, duplicates;
-@@ -966,8 +966,9 @@ static int map_bo_to_gpuvm(struct amdgpu_device *adev,
- * cleared and validate needs to wait on move fences. The eviction
- * fence shouldn't interfere in both these activities
- */
-- amdgpu_amdkfd_remove_eviction_fence(pd, kvm->master->eviction_fence,
-- NULL, NULL);
-+ amdgpu_amdkfd_remove_eviction_fence(pd,
-+ kvm->process_info->eviction_fence,
-+ NULL, NULL);
-
- /* Set virtual address for the allocation, allocate PTs,
- * if needed, and zero them.
-@@ -991,7 +992,7 @@ static int map_bo_to_gpuvm(struct amdgpu_device *adev,
- }
-
- /* Add the eviction fence back */
-- amdgpu_bo_fence(pd, &kvm->master->eviction_fence->base, true);
-+ amdgpu_bo_fence(pd, &kvm->process_info->eviction_fence->base, true);
-
- ret = update_gpuvm_pte(adev, entry, sync);
- if (ret != 0) {
-@@ -1111,7 +1112,7 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(
- struct bo_vm_reservation_context ctx;
- int ret;
- struct amdgpu_bo_list_entry *bo_list_entry;
-- struct amdkfd_vm *master_vm;
-+ struct amdkfd_process_info *process_info;
- unsigned long bo_size;
-
- BUG_ON(kgd == NULL);
-@@ -1119,8 +1120,7 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(
- BUG_ON(vm == NULL);
-
- adev = get_amdgpu_device(kgd);
-- master_vm = ((struct amdkfd_vm *)vm)->master;
-- BUG_ON(master_vm == NULL);
-+ process_info = ((struct amdkfd_vm *)vm)->process_info;
-
- bo_size = mem->bo->tbo.mem.size;
-
-@@ -1148,8 +1148,9 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(
- * TODO: Log an error condition if the bo still has the eviction fence
- * attached
- */
-- amdgpu_amdkfd_remove_eviction_fence(mem->bo, master_vm->eviction_fence,
-- NULL, NULL);
-+ amdgpu_amdkfd_remove_eviction_fence(mem->bo,
-+ process_info->eviction_fence,
-+ NULL, NULL);
- pr_debug("Release VA 0x%llx - 0x%llx\n", mem->va,
- mem->va + bo_size * (1 + mem->aql_queue));
-
-@@ -1171,9 +1172,9 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(
-
- /* Free the BO*/
- bo_list_entry = &mem->bo_list_entry;
-- mutex_lock(&master_vm->lock);
-+ mutex_lock(&process_info->lock);
- list_del(&bo_list_entry->tv.head);
-- mutex_unlock(&master_vm->lock);
-+ mutex_unlock(&process_info->lock);
-
- amdgpu_bo_unref(&mem->bo);
- kfree(mem);
-@@ -1281,7 +1282,8 @@ int amdgpu_amdkfd_gpuvm_map_memory_to_gpu(
- }
-
- if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm) == NULL)
-- amdgpu_bo_fence(bo, &kfd_vm->master->eviction_fence->base,
-+ amdgpu_bo_fence(bo,
-+ &kfd_vm->process_info->eviction_fence->base,
- true);
- unreserve_bo_and_vms(&ctx, true);
-
-@@ -1332,10 +1334,11 @@ static u64 get_vm_pd_gpu_offset(void *vm)
- }
-
- int amdgpu_amdkfd_gpuvm_create_process_vm(struct kgd_dev *kgd, void **vm,
-- void *master_vm)
-+ void **process_info)
- {
- int ret;
- struct amdkfd_vm *new_vm;
-+ struct amdkfd_process_info *info;
- struct amdgpu_device *adev = get_amdgpu_device(kgd);
-
- BUG_ON(kgd == NULL);
-@@ -1353,32 +1356,47 @@ int amdgpu_amdkfd_gpuvm_create_process_vm(struct kgd_dev *kgd, void **vm,
- goto vm_init_fail;
- }
- new_vm->adev = adev;
-- mutex_init(&new_vm->lock);
-- INIT_LIST_HEAD(&new_vm->kfd_bo_list);
-- INIT_LIST_HEAD(&new_vm->kfd_vm_list);
-
-- if (master_vm == NULL) {
-- new_vm->master = new_vm;
-- new_vm->eviction_fence =
-+ if (!*process_info) {
-+ info = kzalloc(sizeof(*info), GFP_KERNEL);
-+ if (!info) {
-+ pr_err("Failed to create amdkfd_process_info");
-+ ret = -ENOMEM;
-+ goto alloc_process_info_fail;
-+ }
-+
-+ mutex_init(&info->lock);
-+ INIT_LIST_HEAD(&info->vm_list_head);
-+ INIT_LIST_HEAD(&info->kfd_bo_list);
-+
-+ info->eviction_fence =
- amdgpu_amdkfd_fence_create(fence_context_alloc(1),
- current->mm);
-- if (new_vm->master->eviction_fence == NULL) {
-+ if (info->eviction_fence == NULL) {
- pr_err("Failed to create eviction fence\n");
-- goto evict_fence_fail;
-+ goto create_evict_fence_fail;
- }
-- } else {
-- new_vm->master = master_vm;
-- list_add_tail(&new_vm->kfd_vm_list,
-- &((struct amdkfd_vm *)master_vm)->kfd_vm_list);
-+
-+ *process_info = info;
- }
-- new_vm->master->n_vms++;
-+
-+ new_vm->process_info = *process_info;
-+
-+ mutex_lock(&new_vm->process_info->lock);
-+ list_add_tail(&new_vm->vm_list_node,
-+ &(new_vm->process_info->vm_list_head));
-+ new_vm->process_info->n_vms++;
-+ mutex_unlock(&new_vm->process_info->lock);
-+
- *vm = (void *) new_vm;
-
- pr_debug("Created process vm %p\n", *vm);
-
- return ret;
-
--evict_fence_fail:
-+create_evict_fence_fail:
-+ kfree(info);
-+alloc_process_info_fail:
- amdgpu_vm_fini(adev, &new_vm->base);
- vm_init_fail:
- kfree(new_vm);
-@@ -1392,6 +1410,7 @@ void amdgpu_amdkfd_gpuvm_destroy_process_vm(struct kgd_dev *kgd, void *vm)
- struct amdkfd_vm *kfd_vm = (struct amdkfd_vm *) vm;
- struct amdgpu_vm *avm = &kfd_vm->base;
- struct amdgpu_bo *pd;
-+ struct amdkfd_process_info *process_info;
-
- BUG_ON(kgd == NULL);
- BUG_ON(vm == NULL);
-@@ -1403,9 +1422,18 @@ void amdgpu_amdkfd_gpuvm_destroy_process_vm(struct kgd_dev *kgd, void *vm)
- amdgpu_bo_fence(pd, NULL, false);
- amdgpu_bo_unreserve(pd);
-
-+ process_info = kfd_vm->process_info;
-+
-+ mutex_lock(&process_info->lock);
-+ process_info->n_vms--;
-+ list_del(&kfd_vm->vm_list_node);
-+ mutex_unlock(&process_info->lock);
-+
- /* Release eviction fence */
-- if (kfd_vm->master == kfd_vm && kfd_vm->eviction_fence != NULL)
-- fence_put(&kfd_vm->eviction_fence->base);
-+ if (!process_info->n_vms) {
-+ fence_put(&process_info->eviction_fence->base);
-+ kfree(process_info);
-+ }
-
- /* Release the VM context */
- amdgpu_vm_fini(adev, avm);
-@@ -1453,7 +1481,7 @@ int amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu(
- unsigned mapped_before;
- int ret = 0;
- struct bo_vm_reservation_context ctx;
-- struct amdkfd_vm *master_vm;
-+ struct amdkfd_process_info *process_info;
- int num_to_resume = 0;
- unsigned long bo_size;
-
-@@ -1461,7 +1489,7 @@ int amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu(
- BUG_ON(mem == NULL);
-
- adev = (struct amdgpu_device *) kgd;
-- master_vm = ((struct amdkfd_vm *)vm)->master;
-+ process_info = ((struct amdkfd_vm *)vm)->process_info;
-
- bo_size = mem->bo->tbo.mem.size;
-
-@@ -1530,7 +1558,7 @@ int amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu(
- */
- if (mem->mapped_to_gpu_memory == 0) {
- amdgpu_amdkfd_remove_eviction_fence(mem->bo,
-- master_vm->eviction_fence,
-+ process_info->eviction_fence,
- NULL, NULL);
- amdgpu_amdkfd_bo_invalidate(mem->bo);
- }
-@@ -1807,7 +1835,7 @@ int amdgpu_amdkfd_gpuvm_import_dmabuf(struct kgd_dev *kgd,
- (*mem)->domain = (bo->prefered_domains & AMDGPU_GEM_DOMAIN_VRAM) ?
- AMDGPU_GEM_DOMAIN_VRAM : AMDGPU_GEM_DOMAIN_GTT;
- (*mem)->mapped_to_gpu_memory = 0;
-- add_kgd_mem_to_kfd_bo_list(*mem, kfd_vm);
-+ add_kgd_mem_to_kfd_bo_list(*mem, kfd_vm->process_info);
-
- return 0;
- }
-@@ -2042,9 +2070,9 @@ int amdgpu_amdkfd_gpuvm_restore_mem(struct kgd_mem *mem, struct mm_struct *mm)
- }
-
- /** amdgpu_amdkfd_gpuvm_restore_process_bos - Restore all BOs for the given
-- * KFD process identified by master_vm
-+ * KFD process identified by process_info
- *
-- * @master_vm: Master VM of the KFD process
-+ * @process_info: amdkfd_process_info of the KFD process
- *
- * After memory eviction, restore thread calls this function. The function
- * should be called when the Process is still valid. BO restore involves -
-@@ -2059,10 +2087,11 @@ int amdgpu_amdkfd_gpuvm_restore_mem(struct kgd_mem *mem, struct mm_struct *mm)
- * 8. Restore back KFD BO list by removing PD BO entries
- */
-
--int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm)
-+int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info)
- {
- struct amdgpu_bo_list_entry *pd_bo_list, *last_pd_bo_entry, *entry;
-- struct amdkfd_vm *master_vm = (struct amdkfd_vm *)m_vm, *peer_vm;
-+ struct amdkfd_process_info *process_info = info;
-+ struct amdkfd_vm *peer_vm;
- struct kgd_mem *mem;
- struct bo_vm_reservation_context ctx;
- struct amdgpu_amdkfd_fence *old_fence;
-@@ -2071,7 +2100,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm)
- int ret = 0, i;
- struct list_head duplicate_save;
-
-- if (WARN_ON(master_vm == NULL || master_vm->master != master_vm))
-+ if (WARN_ON(!process_info))
- return -EINVAL;
-
- INIT_LIST_HEAD(&duplicate_save);
-@@ -2079,7 +2108,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm)
- INIT_LIST_HEAD(&ctx.list);
- INIT_LIST_HEAD(&ctx.duplicates);
-
-- pd_bo_list = kcalloc(master_vm->n_vms,
-+ pd_bo_list = kcalloc(process_info->n_vms,
- sizeof(struct amdgpu_bo_list_entry),
- GFP_KERNEL);
- if (pd_bo_list == NULL)
-@@ -2088,26 +2117,25 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm)
- /* Release old eviction fence and create new one. Use context and mm
- * from the old fence.
- */
-- old_fence = master_vm->eviction_fence;
-- master_vm->eviction_fence =
-+ old_fence = process_info->eviction_fence;
-+ process_info->eviction_fence =
- amdgpu_amdkfd_fence_create(old_fence->base.context,
- old_fence->mm);
- fence_put(&old_fence->base);
-- if (master_vm->eviction_fence == NULL) {
-+ if (!process_info->eviction_fence) {
- pr_err("Failed to create eviction fence\n");
- goto evict_fence_fail;
- }
-
-- /* Get PD BO list from the VM */
-- amdgpu_vm_get_pd_bo(&master_vm->base, &ctx.list,
-- &pd_bo_list[0]);
--
-- i = 1;
-- list_for_each_entry(peer_vm, &master_vm->kfd_vm_list, kfd_vm_list) {
-+ i = 0;
-+ mutex_lock(&process_info->lock);
-+ list_for_each_entry(peer_vm, &process_info->vm_list_head,
-+ vm_list_node) {
- amdgpu_vm_get_pd_bo(&peer_vm->base, &ctx.list,
- &pd_bo_list[i]);
- i++;
- }
-+ mutex_unlock(&process_info->lock);
-
- /* Needed to splicing and cutting the lists */
- last_pd_bo_entry = list_last_entry(&ctx.list,
-@@ -2115,9 +2143,9 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm)
- tv.head);
-
- /* Reserve all BOs and page tables/directory. */
-- mutex_lock(&master_vm->lock);
-- list_splice_init(&ctx.list, &master_vm->kfd_bo_list);
-- ret = ttm_eu_reserve_buffers(&ctx.ticket, &master_vm->kfd_bo_list,
-+ mutex_lock(&process_info->lock);
-+ list_splice_init(&ctx.list, &process_info->kfd_bo_list);
-+ ret = ttm_eu_reserve_buffers(&ctx.ticket, &process_info->kfd_bo_list,
- false, &duplicate_save);
- if (ret) {
- pr_debug("Memory eviction: TTM Reserve Failed. Try again\n");
-@@ -2132,7 +2160,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm)
- pr_err("BUG: list of BOs to reserve has duplicates!\n");
-
- /* Restore kfd_bo_list. ctx.list contains only PDs */
-- list_cut_position(&ctx.list, &master_vm->kfd_bo_list,
-+ list_cut_position(&ctx.list, &process_info->kfd_bo_list,
- &last_pd_bo_entry->tv.head);
-
- amdgpu_sync_create(&ctx.sync);
-@@ -2163,26 +2191,15 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm)
- }
- param.domain = AMDGPU_GEM_DOMAIN_VRAM;
- param.wait = false;
-- adev = amdgpu_ttm_adev(master_vm->base.page_directory->tbo.bdev);
-- ret = amdgpu_vm_validate_pt_bos(adev, &master_vm->base,
-+ adev = amdgpu_ttm_adev(peer_vm->base.page_directory->tbo.bdev);
-+ ret = amdgpu_vm_validate_pt_bos(adev, &peer_vm->base,
- amdgpu_amdkfd_validate, &param);
- if (ret) {
- pr_debug("Memory eviction: Validate failed. Try again\n");
- goto validate_map_fail;
- }
-- master_vm->base.last_eviction_counter =
-+ peer_vm->base.last_eviction_counter =
- atomic64_read(&adev->num_evictions);
-- list_for_each_entry(peer_vm, &master_vm->kfd_vm_list, kfd_vm_list) {
-- adev = amdgpu_ttm_adev(peer_vm->base.page_directory->tbo.bdev);
-- ret = amdgpu_vm_validate_pt_bos(adev, &peer_vm->base,
-- amdgpu_amdkfd_validate, &param);
-- if (ret) {
-- pr_debug("Memory eviction: Validate failed. Try again\n");
-- goto validate_map_fail;
-- }
-- peer_vm->base.last_eviction_counter =
-- atomic64_read(&adev->num_evictions);
-- }
-
- /* Wait for PD/PTs validate to finish and attach eviction fence.
- * PD/PT share the same reservation object
-@@ -2195,7 +2212,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm)
-
-
- /* Validate BOs and map them to GPUVM (update VM page tables). */
-- list_for_each_entry(mem, &master_vm->kfd_bo_list,
-+ list_for_each_entry(mem, &process_info->kfd_bo_list,
- bo_list_entry.tv.head) {
-
- struct amdgpu_bo *bo = mem->bo;
-@@ -2224,28 +2241,28 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm)
- amdgpu_sync_wait(&ctx.sync);
-
- /* Wait for validate to finish and attach new eviction fence */
-- list_for_each_entry(mem, &master_vm->kfd_bo_list,
-+ list_for_each_entry(mem, &process_info->kfd_bo_list,
- bo_list_entry.tv.head) {
- struct amdgpu_bo *bo = mem->bo;
-
- ttm_bo_wait(&bo->tbo, false, false);
-- amdgpu_bo_fence(bo, &master_vm->eviction_fence->base, true);
-+ amdgpu_bo_fence(bo, &process_info->eviction_fence->base, true);
- }
- list_for_each_entry(entry, &ctx.list, tv.head) {
- struct amdgpu_bo *bo = entry->robj;
-
-- amdgpu_bo_fence(bo, &master_vm->eviction_fence->base, true);
-+ amdgpu_bo_fence(bo, &process_info->eviction_fence->base, true);
- }
- validate_map_fail:
- /* Add PDs to kfd_bo_list for unreserve */
-- list_splice_init(&ctx.list, &master_vm->kfd_bo_list);
-- ttm_eu_backoff_reservation(&ctx.ticket, &master_vm->kfd_bo_list);
-+ list_splice_init(&ctx.list, &process_info->kfd_bo_list);
-+ ttm_eu_backoff_reservation(&ctx.ticket, &process_info->kfd_bo_list);
- amdgpu_sync_free(&ctx.sync);
- ttm_reserve_fail:
- /* Restore kfd_bo_list */
-- list_cut_position(&ctx.list, &master_vm->kfd_bo_list,
-+ list_cut_position(&ctx.list, &process_info->kfd_bo_list,
- &last_pd_bo_entry->tv.head);
-- mutex_unlock(&master_vm->lock);
-+ mutex_unlock(&process_info->lock);
- evict_fence_fail:
- kfree(pd_bo_list);
- return ret;
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
-index 4ed7420..46a722f 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
-@@ -817,7 +817,9 @@ void kfd_restore_bo_worker(struct work_struct *work)
- struct kfd_process_device,
- per_device_list);
-
-- ret = pdd->dev->kfd2kgd->restore_process_bos(p->master_vm);
-+ pr_info("Started restoring process of pasid %d\n", p->pasid);
-+
-+ ret = pdd->dev->kfd2kgd->restore_process_bos(p->process_info);
- if (ret) {
- kfd_schedule_restore_bos_and_queues(p);
- return;
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-index 1988bbf..369a61b 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-@@ -709,7 +709,8 @@ struct kfd_process {
-
- struct rb_root bo_interval_tree;
-
-- void *master_vm;
-+ /* Information used for memory eviction */
-+ void *process_info;
-
- /* 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 1aa7ee3..5e80a44 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-@@ -630,14 +630,12 @@ 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->master_vm)) {
-+ &p->process_info)) {
- pr_err("Failed to create process VM object\n");
- list_del(&pdd->per_device_list);
- kfree(pdd);
- pdd = NULL;
- }
-- if (p->master_vm == NULL)
-- p->master_vm = pdd->vm;
- }
-
- return pdd;
-diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
-index 57e0982..37e1edb 100644
---- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
-+++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
-@@ -223,8 +223,7 @@ struct tile_config {
- * @submit_ib: Submits an IB to the engine specified by inserting the IB to
- * the corresonded ring (ring type).
- *
-- * @restore_process_bos: Restore all BOs that belongs to the process identified
-- * by master_vm.
-+ * @restore_process_bos: Restore all BOs that belongs to the process
- *
- * @copy_mem_to_mem: Copies size bytes from source BO to destination BO
- *
-@@ -247,7 +246,7 @@ struct kfd2kgd_calls {
- uint32_t (*get_max_engine_clock_in_mhz)(struct kgd_dev *kgd);
-
- int (*create_process_vm)(struct kgd_dev *kgd, void **vm,
-- void *master_vm);
-+ void **process_info);
- void (*destroy_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);
-@@ -372,7 +371,7 @@ struct kfd2kgd_calls {
- int (*get_tile_config)(struct kgd_dev *kgd,
- struct tile_config *config);
-
-- int (*restore_process_bos)(void *master_vm);
-+ int (*restore_process_bos)(void *process_info);
- int (*copy_mem_to_mem)(struct kgd_dev *kgd, struct kgd_mem *src_mem,
- uint64_t src_offset, struct kgd_mem *dst_mem,
- uint64_t dest_offset, uint64_t size, struct fence **f,
---
-2.7.4
-