mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 10:09:10 +02:00
drm/gpusvm: Reject VMAs with VM_IO or VM_PFNMAP when creating SVM ranges
VMAs marked with VM_IO or VM_PFNMAP are not backed by struct page
objects, which GPUSVM requires in order to operate correctly. In
particular, get_pages() relies on hmm_range_fault() to resolve struct
pages for the target range.
Attempting to create an SVM range on such VMAs results in repeated
get_pages() failures and can lead to an infinite loop inside a driver’s
page‑fault handler. Prevent this by rejecting ranges on VM_IO or
VM_PFNMAP VMAs and returning -EIO.
Fixes: 99624bdff8 ("drm/gpusvm: Add support for GPU Shared Virtual Memory")
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Link: https://patch.msgid.link/20260325231608.25581-1-matthew.brost@intel.com
This commit is contained in:
parent
896070686b
commit
b82a225e57
|
|
@ -1065,6 +1065,11 @@ drm_gpusvm_range_find_or_insert(struct drm_gpusvm *gpusvm,
|
|||
goto err_notifier_remove;
|
||||
}
|
||||
|
||||
if (vas->vm_flags & (VM_IO | VM_PFNMAP)) {
|
||||
err = -EIO;
|
||||
goto err_notifier_remove;
|
||||
}
|
||||
|
||||
range = drm_gpusvm_range_find(notifier, fault_addr, fault_addr + 1);
|
||||
if (range)
|
||||
goto out_mmunlock;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user