On Mon, 5 Dec 2022 22:03:27 +0800 Kefeng Wang <wangkefeng.wang@xxxxxxxxxx> wrote: > When handle MADV_WILLNEED in madvise(), the soflockup may be occurred > in swapin_walk_pmd_entry() if swapin lots of memory on slow device, > add a cond_resched() into it to avoid the possible softlockup. > > ... > > --- a/mm/madvise.c > +++ b/mm/madvise.c > @@ -226,6 +226,7 @@ static int swapin_walk_pmd_entry(pmd_t *pmd, unsigned long start, > put_page(page); > } > swap_read_unplug(splug); > + cond_resched(); > > return 0; > } I wonder if this would be better in walk_pmd_range(), to address other very large walk attempts.