aboutsummaryrefslogtreecommitdiffstats
path: root/mm/huge_memory.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/huge_memory.c')
-rw-r--r--mm/huge_memory.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index d36b2af4d1bf..1ebc93e179f3 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -1828,7 +1828,7 @@ static void __split_huge_pud_locked(struct vm_area_struct *vma, pud_t *pud,
1828 VM_BUG_ON_VMA(vma->vm_end < haddr + HPAGE_PUD_SIZE, vma); 1828 VM_BUG_ON_VMA(vma->vm_end < haddr + HPAGE_PUD_SIZE, vma);
1829 VM_BUG_ON(!pud_trans_huge(*pud) && !pud_devmap(*pud)); 1829 VM_BUG_ON(!pud_trans_huge(*pud) && !pud_devmap(*pud));
1830 1830
1831 count_vm_event(THP_SPLIT_PMD); 1831 count_vm_event(THP_SPLIT_PUD);
1832 1832
1833 pudp_huge_clear_flush_notify(vma, haddr, pud); 1833 pudp_huge_clear_flush_notify(vma, haddr, pud);
1834} 1834}
@@ -2048,6 +2048,7 @@ void split_huge_pmd_address(struct vm_area_struct *vma, unsigned long address,
2048 bool freeze, struct page *page) 2048 bool freeze, struct page *page)
2049{ 2049{
2050 pgd_t *pgd; 2050 pgd_t *pgd;
2051 p4d_t *p4d;
2051 pud_t *pud; 2052 pud_t *pud;
2052 pmd_t *pmd; 2053 pmd_t *pmd;
2053 2054
@@ -2055,7 +2056,11 @@ void split_huge_pmd_address(struct vm_area_struct *vma, unsigned long address,
2055 if (!pgd_present(*pgd)) 2056 if (!pgd_present(*pgd))
2056 return; 2057 return;
2057 2058
2058 pud = pud_offset(pgd, address); 2059 p4d = p4d_offset(pgd, address);
2060 if (!p4d_present(*p4d))
2061 return;
2062
2063 pud = pud_offset(p4d, address);
2059 if (!pud_present(*pud)) 2064 if (!pud_present(*pud))
2060 return; 2065 return;
2061 2066