On 12/14/2017 04:59 PM, Michal Hocko wrote: > On Thu 14-12-17 16:44:26, Anshuman Khandual wrote: >> diff --git a/mm/mprotect.c b/mm/mprotect.c >> index ec39f73..43c29fa 100644 >> --- a/mm/mprotect.c >> +++ b/mm/mprotect.c >> @@ -196,6 +196,7 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma, >> this_pages = change_pte_range(vma, pmd, addr, next, newprot, >> dirty_accountable, prot_numa); >> pages += this_pages; >> + cond_resched(); >> } while (pmd++, addr = next, addr != end); >> >> if (mni_start) > > this is not exactly what I meant. See how change_huge_pmd does continue. > That's why I mentioned zap_pmd_range which does goto next... I might be still missing something but is this what you meant ? Here we will give cond_resched() cover to the THP backed pages as well. diff --git a/mm/mprotect.c b/mm/mprotect.c index ec39f73..3d445ee 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -188,7 +188,7 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma, } /* huge pmd was handled */ - continue; + goto next; } } /* fall through, the trans huge pmd just split */ @@ -196,6 +196,8 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma, this_pages = change_pte_range(vma, pmd, addr, next, newprot, dirty_accountable, prot_numa); pages += this_pages; +next: + cond_resched(); } while (pmd++, addr = next, addr != end); if (mni_start) -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>