On Thu, 8 Jun 2017, Michal Hocko wrote: > collapse_huge_page > pte_offset_map > kmap_atomic > kmap_atomic_prot > preempt_disable > __collapse_huge_page_copy > pte_unmap > kunmap_atomic > __kunmap_atomic > preempt_enable > > I suspect, so cond_resched seems indeed inappropriate on 32b systems. >
Seems to be an issue for i386 and arm with ARM_LPAE. I'm slightly surprised we can get away with __collapse_huge_page_swapin() for VM_FAULT_RETRY, unless that hasn't been encountered yet. I think the cond_resched() in __collapse_huge_page_copy() could be done only for !in_atomic() if we choose.