mirror of https://github.com/OpenIPC/firmware.git
37 lines
1.2 KiB
Diff
37 lines
1.2 KiB
Diff
diff -drupN a/mm/huge_memory.c b/mm/huge_memory.c
|
|
--- a/mm/huge_memory.c 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/mm/huge_memory.c 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -1445,7 +1445,7 @@ int zap_huge_pmd(struct mmu_gather *tlb,
|
|
|
|
bool move_huge_pmd(struct vm_area_struct *vma, unsigned long old_addr,
|
|
unsigned long new_addr, unsigned long old_end,
|
|
- pmd_t *old_pmd, pmd_t *new_pmd, bool *need_flush)
|
|
+ pmd_t *old_pmd, pmd_t *new_pmd)
|
|
{
|
|
spinlock_t *old_ptl, *new_ptl;
|
|
pmd_t pmd;
|
|
@@ -1476,7 +1476,7 @@ bool move_huge_pmd(struct vm_area_struct
|
|
if (new_ptl != old_ptl)
|
|
spin_lock_nested(new_ptl, SINGLE_DEPTH_NESTING);
|
|
pmd = pmdp_huge_get_and_clear(mm, old_addr, old_pmd);
|
|
- if (pmd_present(pmd) && pmd_dirty(pmd))
|
|
+ if (pmd_present(pmd))
|
|
force_flush = true;
|
|
VM_BUG_ON(!pmd_none(*new_pmd));
|
|
|
|
@@ -1487,12 +1487,10 @@ bool move_huge_pmd(struct vm_area_struct
|
|
pgtable_trans_huge_deposit(mm, new_pmd, pgtable);
|
|
}
|
|
set_pmd_at(mm, new_addr, new_pmd, pmd_mksoft_dirty(pmd));
|
|
- if (new_ptl != old_ptl)
|
|
- spin_unlock(new_ptl);
|
|
if (force_flush)
|
|
flush_tlb_range(vma, old_addr, old_addr + PMD_SIZE);
|
|
- else
|
|
- *need_flush = true;
|
|
+ if (new_ptl != old_ptl)
|
|
+ spin_unlock(new_ptl);
|
|
spin_unlock(old_ptl);
|
|
return true;
|
|
}
|