|
@@ -2836,6 +2836,7 @@ static void __split_huge_pmd_locked(struct vm_area_struct *vma, pmd_t *pmd,
|
|
|
pgtable_t pgtable;
|
|
|
pmd_t _pmd;
|
|
|
bool young, write, dirty;
|
|
|
+ unsigned long addr;
|
|
|
int i;
|
|
|
|
|
|
VM_BUG_ON(haddr & ~HPAGE_PMD_MASK);
|
|
@@ -2865,7 +2866,7 @@ static void __split_huge_pmd_locked(struct vm_area_struct *vma, pmd_t *pmd,
|
|
|
pgtable = pgtable_trans_huge_withdraw(mm, pmd);
|
|
|
pmd_populate(mm, &_pmd, pgtable);
|
|
|
|
|
|
- for (i = 0; i < HPAGE_PMD_NR; i++, haddr += PAGE_SIZE) {
|
|
|
+ for (i = 0, addr = haddr; i < HPAGE_PMD_NR; i++, addr += PAGE_SIZE) {
|
|
|
pte_t entry, *pte;
|
|
|
/*
|
|
|
* Note that NUMA hinting access restrictions are not
|
|
@@ -2886,9 +2887,9 @@ static void __split_huge_pmd_locked(struct vm_area_struct *vma, pmd_t *pmd,
|
|
|
}
|
|
|
if (dirty)
|
|
|
SetPageDirty(page + i);
|
|
|
- pte = pte_offset_map(&_pmd, haddr);
|
|
|
+ pte = pte_offset_map(&_pmd, addr);
|
|
|
BUG_ON(!pte_none(*pte));
|
|
|
- set_pte_at(mm, haddr, pte, entry);
|
|
|
+ set_pte_at(mm, addr, pte, entry);
|
|
|
atomic_inc(&page[i]._mapcount);
|
|
|
pte_unmap(pte);
|
|
|
}
|
|
@@ -2938,7 +2939,7 @@ static void __split_huge_pmd_locked(struct vm_area_struct *vma, pmd_t *pmd,
|
|
|
pmd_populate(mm, pmd, pgtable);
|
|
|
|
|
|
if (freeze) {
|
|
|
- for (i = 0; i < HPAGE_PMD_NR; i++, haddr += PAGE_SIZE) {
|
|
|
+ for (i = 0; i < HPAGE_PMD_NR; i++) {
|
|
|
page_remove_rmap(page + i, false);
|
|
|
put_page(page + i);
|
|
|
}
|