|
@@ -203,8 +203,6 @@ static int prepare_low_seg_for_htlb(struct mm_struct *mm, unsigned long seg)
|
|
|
unsigned long start = seg << SID_SHIFT;
|
|
|
unsigned long end = (seg+1) << SID_SHIFT;
|
|
|
struct vm_area_struct *vma;
|
|
|
- unsigned long addr;
|
|
|
- struct mmu_gather *tlb;
|
|
|
|
|
|
BUG_ON(seg >= 16);
|
|
|
|
|
@@ -213,41 +211,6 @@ static int prepare_low_seg_for_htlb(struct mm_struct *mm, unsigned long seg)
|
|
|
if (vma && (vma->vm_start < end))
|
|
|
return -EBUSY;
|
|
|
|
|
|
- /* Clean up any leftover PTE pages in the region */
|
|
|
- spin_lock(&mm->page_table_lock);
|
|
|
- tlb = tlb_gather_mmu(mm, 0);
|
|
|
- for (addr = start; addr < end; addr += PMD_SIZE) {
|
|
|
- pgd_t *pgd = pgd_offset(mm, addr);
|
|
|
- pmd_t *pmd;
|
|
|
- struct page *page;
|
|
|
- pte_t *pte;
|
|
|
- int i;
|
|
|
-
|
|
|
- if (pgd_none(*pgd))
|
|
|
- continue;
|
|
|
- pmd = pmd_offset(pgd, addr);
|
|
|
- if (!pmd || pmd_none(*pmd))
|
|
|
- continue;
|
|
|
- if (pmd_bad(*pmd)) {
|
|
|
- pmd_ERROR(*pmd);
|
|
|
- pmd_clear(pmd);
|
|
|
- continue;
|
|
|
- }
|
|
|
- pte = (pte_t *)pmd_page_kernel(*pmd);
|
|
|
- /* No VMAs, so there should be no PTEs, check just in case. */
|
|
|
- for (i = 0; i < PTRS_PER_PTE; i++) {
|
|
|
- BUG_ON(!pte_none(*pte));
|
|
|
- pte++;
|
|
|
- }
|
|
|
- page = pmd_page(*pmd);
|
|
|
- pmd_clear(pmd);
|
|
|
- mm->nr_ptes--;
|
|
|
- dec_page_state(nr_page_table_pages);
|
|
|
- pte_free_tlb(tlb, page);
|
|
|
- }
|
|
|
- tlb_finish_mmu(tlb, start, end);
|
|
|
- spin_unlock(&mm->page_table_lock);
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|