When the process is getting restored, the queues are not mapped yet, so there is no VMID assigned for this process and no TLBs to flush.
Signed-off-by: David Yat Sin <david.yat...@amd.com> Reviewed-by: Felix Kuehling <felix.kuehl...@amd.com> --- drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 30 +----------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c index 59d3fe269e7c..789bdfbd3f9b 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c @@ -2102,7 +2102,6 @@ static int criu_restore_bos(struct kfd_process *p, struct kfd_criu_bo_bucket *bo_buckets = NULL; struct kfd_criu_bo_priv_data *bo_privs = NULL; const bool criu_resume = true; - bool flush_tlbs = false; int ret = 0, j = 0; uint32_t i = 0; @@ -2248,7 +2247,6 @@ static int criu_restore_bos(struct kfd_process *p, for (j = 0; j < p->n_pdds; j++) { struct kfd_dev *peer; struct kfd_process_device *peer_pdd; - bool table_freed = false; if (!bo_priv->mapped_gpuids[j]) break; @@ -2268,20 +2266,11 @@ static int criu_restore_bos(struct kfd_process *p, pr_debug("map mem in restore ioctl -> 0x%llx\n", ((struct kgd_mem *)mem)->va); ret = amdgpu_amdkfd_gpuvm_map_memory_to_gpu(peer->adev, - (struct kgd_mem *)mem, peer_pdd->drm_priv, &table_freed); + (struct kgd_mem *)mem, peer_pdd->drm_priv, NULL); if (ret) { pr_err("Failed to map to gpu %d/%d\n", j, p->n_pdds); goto exit; } - if (table_freed) - flush_tlbs = true; - } - - ret = amdgpu_amdkfd_gpuvm_sync_memory(dev->adev, - (struct kgd_mem *) mem, true); - if (ret) { - pr_debug("Sync memory failed, wait interrupted by user signal\n"); - goto exit; } pr_debug("map memory was successful for the BO\n"); @@ -2296,23 +2285,6 @@ static int criu_restore_bos(struct kfd_process *p, } } /* done */ - if (flush_tlbs) { - /* Flush TLBs after waiting for the page table updates to complete */ - for (j = 0; j < p->n_pdds; j++) { - struct kfd_dev *peer; - struct kfd_process_device *pdd = p->pdds[j]; - struct kfd_process_device *peer_pdd; - - peer = kfd_device_by_id(pdd->dev->id); - if (WARN_ON_ONCE(!peer)) - continue; - peer_pdd = kfd_get_process_device_data(peer, p); - if (WARN_ON_ONCE(!peer_pdd)) - continue; - kfd_flush_tlb(peer_pdd, TLB_FLUSH_LEGACY); - } - } - /* Copy only the buckets back so user can read bo_buckets[N].restored_offset */ ret = copy_to_user((void __user *)args->bos, bo_buckets, -- 2.17.1