Post scanning VMAs less than PMD-size, cond_resched() may get called at a frequency of 1 << order worth of pte scan. Earlier, this was at a PMD-worth scan. Therefore, manually enforce the previous behaviour; not doing this causes the khugepaged selftest to timeout. Signed-off-by: Dev Jain <dev.jain@xxxxxxx> --- mm/khugepaged.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 7c9a758f6817..d2bb008b95e7 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -2650,6 +2650,7 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, int *result, unsigned long orders; int order; bool is_file_vma; + int prev_progress = 0; VM_BUG_ON(!pages); lockdep_assert_held(&khugepaged_mm_lock); @@ -2730,7 +2731,10 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, int *result, while (khugepaged_scan.address < hend) { bool mmap_locked = true; - cond_resched(); + if (progress - prev_progress >= HPAGE_PMD_NR) { + cond_resched(); + prev_progress = progress; + } if (unlikely(hpage_collapse_test_exit_or_disable(mm))) goto breakouterloop; -- 2.30.2