drm/amdkfd: fix vram allocation failure for a special case

[ Upstream commit 93aa919ca0 ]

When it only allocates vram without va, which is 0, and a
SVM range allocated stays in this range, the vram allocation
returns failure. It should be skipped for this case from
SVM usage check.

Signed-off-by: Eric Huang <jinhuieric.huang@amd.com>
Reviewed-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Eric Huang
2025-08-18 14:22:53 -04:00
committed by Greg Kroah-Hartman
parent d367caca4a
commit 01ffa1ba69

View File

@@ -1069,7 +1069,12 @@ static int kfd_ioctl_alloc_memory_of_gpu(struct file *filep,
svm_range_list_lock_and_flush_work(&p->svms, current->mm); svm_range_list_lock_and_flush_work(&p->svms, current->mm);
mutex_lock(&p->svms.lock); mutex_lock(&p->svms.lock);
mmap_write_unlock(current->mm); mmap_write_unlock(current->mm);
if (interval_tree_iter_first(&p->svms.objects,
/* Skip a special case that allocates VRAM without VA,
* VA will be invalid of 0.
*/
if (!(!args->va_addr && (flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM)) &&
interval_tree_iter_first(&p->svms.objects,
args->va_addr >> PAGE_SHIFT, args->va_addr >> PAGE_SHIFT,
(args->va_addr + args->size - 1) >> PAGE_SHIFT)) { (args->va_addr + args->size - 1) >> PAGE_SHIFT)) {
pr_err("Address: 0x%llx already allocated by SVM\n", pr_err("Address: 0x%llx already allocated by SVM\n",