diff options
author | Jonathan Gray <jsg@cvs.openbsd.org> | 2024-01-22 03:09:51 +0000 |
---|---|---|
committer | Jonathan Gray <jsg@cvs.openbsd.org> | 2024-01-22 03:09:51 +0000 |
commit | bb6d7d278570537bc87bfbd3d2fe14eeb29de27a (patch) | |
tree | 1729c3d5b5c5ea77625705504cd3230fc8574764 | |
parent | 8bd591c648863c0b36c78286839aee1656216383 (diff) |
drm/amdkfd: svm range always mapped flag not working on APU
From Philip Yang
bd443910debf71a1c0140c148ffb4f048fff3c2b in linux-6.6.y/6.6.13
ebab8c3eb6a6515dc14cd93fc29dd287709da6d3 in mainline linux
-rw-r--r-- | sys/dev/pci/drm/amd/amdkfd/kfd_svm.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/dev/pci/drm/amd/amdkfd/kfd_svm.c b/sys/dev/pci/drm/amd/amdkfd/kfd_svm.c index 63ce30ea689..8e368e4659f 100644 --- a/sys/dev/pci/drm/amd/amdkfd/kfd_svm.c +++ b/sys/dev/pci/drm/amd/amdkfd/kfd_svm.c @@ -1632,18 +1632,24 @@ static int svm_range_validate_and_map(struct mm_struct *mm, if (test_bit(gpuidx, prange->bitmap_access)) bitmap_set(ctx->bitmap, gpuidx, 1); } + + /* + * If prange is already mapped or with always mapped flag, + * update mapping on GPUs with ACCESS attribute + */ + if (bitmap_empty(ctx->bitmap, MAX_GPU_INSTANCE)) { + if (prange->mapped_to_gpu || + prange->flags & KFD_IOCTL_SVM_FLAG_GPU_ALWAYS_MAPPED) + bitmap_copy(ctx->bitmap, prange->bitmap_access, MAX_GPU_INSTANCE); + } } else { bitmap_or(ctx->bitmap, prange->bitmap_access, prange->bitmap_aip, MAX_GPU_INSTANCE); } if (bitmap_empty(ctx->bitmap, MAX_GPU_INSTANCE)) { - bitmap_copy(ctx->bitmap, prange->bitmap_access, MAX_GPU_INSTANCE); - if (!prange->mapped_to_gpu || - bitmap_empty(ctx->bitmap, MAX_GPU_INSTANCE)) { - r = 0; - goto free_ctx; - } + r = 0; + goto free_ctx; } if (prange->actual_loc && !prange->ttm_res) { |