|
@@ -108,13 +108,10 @@ static pte_t get_clear_flush(struct mm_struct *mm,
|
|
|
unsigned long pgsize,
|
|
|
unsigned long ncontig)
|
|
|
{
|
|
|
- struct vm_area_struct vma;
|
|
|
pte_t orig_pte = huge_ptep_get(ptep);
|
|
|
bool valid = pte_valid(orig_pte);
|
|
|
unsigned long i, saddr = addr;
|
|
|
|
|
|
- vma_init(&vma, mm);
|
|
|
-
|
|
|
for (i = 0; i < ncontig; i++, addr += pgsize, ptep++) {
|
|
|
pte_t pte = ptep_get_and_clear(mm, addr, ptep);
|
|
|
|
|
@@ -127,8 +124,10 @@ static pte_t get_clear_flush(struct mm_struct *mm,
|
|
|
orig_pte = pte_mkdirty(orig_pte);
|
|
|
}
|
|
|
|
|
|
- if (valid)
|
|
|
+ if (valid) {
|
|
|
+ struct vm_area_struct vma = TLB_FLUSH_VMA(mm, 0);
|
|
|
flush_tlb_range(&vma, saddr, addr);
|
|
|
+ }
|
|
|
return orig_pte;
|
|
|
}
|
|
|
|
|
@@ -147,10 +146,9 @@ static void clear_flush(struct mm_struct *mm,
|
|
|
unsigned long pgsize,
|
|
|
unsigned long ncontig)
|
|
|
{
|
|
|
- struct vm_area_struct vma;
|
|
|
+ struct vm_area_struct vma = TLB_FLUSH_VMA(mm, 0);
|
|
|
unsigned long i, saddr = addr;
|
|
|
|
|
|
- vma_init(&vma, mm);
|
|
|
for (i = 0; i < ncontig; i++, addr += pgsize, ptep++)
|
|
|
pte_clear(mm, addr, ptep);
|
|
|
|