Lines Matching +full:i +full:- +full:tlb +full:- +full:size

1 // SPDX-License-Identifier: GPL-2.0
3 * SPARC64 Huge TLB page support.
17 #include <asm/tlb.h>
159 unsigned long size = 1UL << huge_tte_to_shift(pte); in huge_tte_to_size() local
161 if (size == REAL_HPAGE_SIZE) in huge_tte_to_size()
162 size = HPAGE_SIZE; in huge_tte_to_size()
163 return size; in huge_tte_to_size()
224 unsigned long i, size; in __set_huge_pte_at() local
227 size = huge_tte_to_size(entry); in __set_huge_pte_at()
230 if (size >= PUD_SIZE) in __set_huge_pte_at()
232 else if (size >= PMD_SIZE) in __set_huge_pte_at()
237 nptes = size >> shift; in __set_huge_pte_at()
240 mm->context.hugetlb_pte_count += nptes; in __set_huge_pte_at()
242 addr &= ~(size - 1); in __set_huge_pte_at()
246 for (i = 0; i < nptes; i++) in __set_huge_pte_at()
247 ptep[i] = __pte(pte_val(entry) + (i << shift)); in __set_huge_pte_at()
251 if (size == HPAGE_SIZE) in __set_huge_pte_at()
265 unsigned int i, nptes, orig_shift, shift; in huge_ptep_get_and_clear() local
266 unsigned long size; in huge_ptep_get_and_clear() local
270 size = huge_tte_to_size(entry); in huge_ptep_get_and_clear()
273 if (size >= PUD_SIZE) in huge_ptep_get_and_clear()
275 else if (size >= PMD_SIZE) in huge_ptep_get_and_clear()
280 nptes = size >> shift; in huge_ptep_get_and_clear()
284 mm->context.hugetlb_pte_count -= nptes; in huge_ptep_get_and_clear()
286 addr &= ~(size - 1); in huge_ptep_get_and_clear()
287 for (i = 0; i < nptes; i++) in huge_ptep_get_and_clear()
288 ptep[i] = __pte(0UL); in huge_ptep_get_and_clear()
292 if (size == HPAGE_SIZE) in huge_ptep_get_and_clear()
299 static void hugetlb_free_pte_range(struct mmu_gather *tlb, pmd_t *pmd, in hugetlb_free_pte_range() argument
305 pte_free_tlb(tlb, token, addr); in hugetlb_free_pte_range()
306 mm_dec_nr_ptes(tlb->mm); in hugetlb_free_pte_range()
309 static void hugetlb_free_pmd_range(struct mmu_gather *tlb, pud_t *pud, in hugetlb_free_pmd_range() argument
326 hugetlb_free_pte_range(tlb, pmd, addr); in hugetlb_free_pmd_range()
337 if (end - 1 > ceiling - 1) in hugetlb_free_pmd_range()
342 pmd_free_tlb(tlb, pmd, start); in hugetlb_free_pmd_range()
343 mm_dec_nr_pmds(tlb->mm); in hugetlb_free_pmd_range()
346 static void hugetlb_free_pud_range(struct mmu_gather *tlb, p4d_t *p4d, in hugetlb_free_pud_range() argument
363 hugetlb_free_pmd_range(tlb, pud, addr, next, floor, in hugetlb_free_pud_range()
375 if (end - 1 > ceiling - 1) in hugetlb_free_pud_range()
380 pud_free_tlb(tlb, pud, start); in hugetlb_free_pud_range()
381 mm_dec_nr_puds(tlb->mm); in hugetlb_free_pud_range()
384 void hugetlb_free_pgd_range(struct mmu_gather *tlb, in hugetlb_free_pgd_range() argument
403 if (end - 1 > ceiling - 1) in hugetlb_free_pgd_range()
404 end -= PMD_SIZE; in hugetlb_free_pgd_range()
405 if (addr > end - 1) in hugetlb_free_pgd_range()
408 pgd = pgd_offset(tlb->mm, addr); in hugetlb_free_pgd_range()
414 hugetlb_free_pud_range(tlb, p4d, addr, next, floor, ceiling); in hugetlb_free_pgd_range()