aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Yang <[email protected]>2021-04-19 21:51:27 -0400
committerAlex Deucher <[email protected]>2021-04-28 23:36:05 -0400
commit4999e398e281b336c7e08a3bf0da014d9cc2119f (patch)
tree48e274d627cfed651f51d84e37df5034e869f991
parentc3c5cc9a83dca59b3a883eb0200fcbf467a9115e (diff)
drm/amdkfd: retry validation to recover range
GPU vm retry fault recover range need retry validation if 1. range is split in parallel by unmap while recover 2. range migrate to system memory and range is updated in system memory while recover Signed-off-by: Philip Yang <[email protected]> Reviewed-by: Felix Kuehling <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_svm.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
index e4ce97ab6e26..30d142f6272f 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
@@ -1402,11 +1402,13 @@ static int svm_range_validate_and_map(struct mm_struct *mm,
svm_range_lock(prange);
if (!prange->actual_loc) {
if (amdgpu_hmm_range_get_pages_done(hmm_range)) {
+ pr_debug("hmm update the range, need validate again\n");
r = -EAGAIN;
goto unlock_out;
}
}
if (!list_empty(&prange->child_list)) {
+ pr_debug("range split by unmap in parallel, validate again\n");
r = -EAGAIN;
goto unlock_out;
}
@@ -2355,6 +2357,10 @@ out_unlock_svms:
out:
kfd_unref_process(p);
+ if (r == -EAGAIN) {
+ pr_debug("recover vm fault later\n");
+ r = 0;
+ }
return r;
}