On Tue, 28 Jan 2025 01:34:22 -0500 sooraj <sooraj20636@xxxxxxxxx> wrote: > When hmm_vma_walk_test() skips a VMA (e.g., unsupported VM_IO/PFNMAP range), > it must update hmm_vma_walk->last to the end of the skipped VMA. Failing to > do so causes hmm_range_fault() to restart from the same address during > -EBUSY retries, reprocessing the skipped VMA indefinitely. This results in > an infinite loop if the VMA remains non-processable. > > Update hmm_vma_walk->last to the VMA's end address in hmm_vma_walk_test() > when skipping the range. This ensures subsequent iterations resume correctly > after the skipped VMA, preventing infinite retry loops. > Well that's unfortunate. This code seems quite old - can you tell us what your userspace is doing to trigger this behavior? > --- a/mm/hmm.c > +++ b/mm/hmm.c > @@ -547,6 +547,8 @@ static int hmm_vma_walk_test(unsigned long start, unsigned long end, > > hmm_pfns_fill(start, end, range, HMM_PFN_ERROR); > > + /* Update last to the end of the skipped VMA to prevent reprocessing */ > + hmm_vma_walk->last = end; > /* Skip this vma and continue processing the next vma. */ > return 1; > } This appears to deserve a cc:stable, but I suspect the bug is so old that a Fixes: won't be needed.