diff options
| -rw-r--r-- | mm/khugepaged.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 89718734015bf..a5e9842392eaf 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1286,6 +1286,13 @@ static enum scan_result collapse_huge_page(struct mm_struct *mm, unsigned long s anon_vma_lock_write(vma->anon_vma); anon_vma_locked = true; + /* + * Only notify about the PTE range we will actually modify. While we + * temporary unmap the whole PTE table for mTHP collapse, we'll remap + * it later, leaving other PTEs effectively unmodified. The locks we + * hold prevent anybody from stumbling over such temporarily unmapped + * PTE tables. + */ mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm, start_addr, end_addr); mmu_notifier_invalidate_range_start(&range); @@ -1351,7 +1358,7 @@ static enum scan_result collapse_huge_page(struct mm_struct *mm, unsigned long s */ __folio_mark_uptodate(folio); spin_lock(pmd_ptl); - WARN_ON_ONCE(!pmd_none(*pmd)); + VM_WARN_ON_ONCE(!pmd_none(*pmd)); if (is_pmd_order(order)) { pgtable = pmd_pgtable(_pmd); pgtable_trans_huge_deposit(mm, pmd, pgtable); |
