Lines Matching refs:tlb

95 ia64_tlb_flush_mmu_tlbonly(struct mmu_gather *tlb, unsigned long start, unsigned long end)  in ia64_tlb_flush_mmu_tlbonly()  argument
97 tlb->need_flush = 0; in ia64_tlb_flush_mmu_tlbonly()
99 if (tlb->fullmm) { in ia64_tlb_flush_mmu_tlbonly()
105 flush_tlb_mm(tlb->mm); in ia64_tlb_flush_mmu_tlbonly()
122 vma.vm_mm = tlb->mm; in ia64_tlb_flush_mmu_tlbonly()
132 ia64_tlb_flush_mmu_free(struct mmu_gather *tlb) in ia64_tlb_flush_mmu_free() argument
138 nr = tlb->nr; in ia64_tlb_flush_mmu_free()
140 tlb->nr = 0; in ia64_tlb_flush_mmu_free()
141 tlb->start_addr = ~0UL; in ia64_tlb_flush_mmu_free()
143 free_page_and_swap_cache(tlb->pages[i]); in ia64_tlb_flush_mmu_free()
151 ia64_tlb_flush_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long end) in ia64_tlb_flush_mmu() argument
153 if (!tlb->need_flush) in ia64_tlb_flush_mmu()
155 ia64_tlb_flush_mmu_tlbonly(tlb, start, end); in ia64_tlb_flush_mmu()
156 ia64_tlb_flush_mmu_free(tlb); in ia64_tlb_flush_mmu()
159 static inline void __tlb_alloc_page(struct mmu_gather *tlb) in __tlb_alloc_page() argument
164 tlb->pages = (void *)addr; in __tlb_alloc_page()
165 tlb->max = PAGE_SIZE / sizeof(void *); in __tlb_alloc_page()
171 tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long start, unsigned long end) in tlb_gather_mmu() argument
173 tlb->mm = mm; in tlb_gather_mmu()
174 tlb->max = ARRAY_SIZE(tlb->local); in tlb_gather_mmu()
175 tlb->pages = tlb->local; in tlb_gather_mmu()
176 tlb->nr = 0; in tlb_gather_mmu()
177 tlb->fullmm = !(start | (end+1)); in tlb_gather_mmu()
178 tlb->start = start; in tlb_gather_mmu()
179 tlb->end = end; in tlb_gather_mmu()
180 tlb->start_addr = ~0UL; in tlb_gather_mmu()
188 tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) in tlb_finish_mmu() argument
194 ia64_tlb_flush_mmu(tlb, start, end); in tlb_finish_mmu()
199 if (tlb->pages != tlb->local) in tlb_finish_mmu()
200 free_pages((unsigned long)tlb->pages, 0); in tlb_finish_mmu()
208 static inline int __tlb_remove_page(struct mmu_gather *tlb, struct page *page) in __tlb_remove_page() argument
210 tlb->need_flush = 1; in __tlb_remove_page()
212 if (!tlb->nr && tlb->pages == tlb->local) in __tlb_remove_page()
213 __tlb_alloc_page(tlb); in __tlb_remove_page()
215 tlb->pages[tlb->nr++] = page; in __tlb_remove_page()
216 VM_BUG_ON(tlb->nr > tlb->max); in __tlb_remove_page()
218 return tlb->max - tlb->nr; in __tlb_remove_page()
221 static inline void tlb_flush_mmu_tlbonly(struct mmu_gather *tlb) in tlb_flush_mmu_tlbonly() argument
223 ia64_tlb_flush_mmu_tlbonly(tlb, tlb->start_addr, tlb->end_addr); in tlb_flush_mmu_tlbonly()
226 static inline void tlb_flush_mmu_free(struct mmu_gather *tlb) in tlb_flush_mmu_free() argument
228 ia64_tlb_flush_mmu_free(tlb); in tlb_flush_mmu_free()
231 static inline void tlb_flush_mmu(struct mmu_gather *tlb) in tlb_flush_mmu() argument
233 ia64_tlb_flush_mmu(tlb, tlb->start_addr, tlb->end_addr); in tlb_flush_mmu()
236 static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) in tlb_remove_page() argument
238 if (!__tlb_remove_page(tlb, page)) in tlb_remove_page()
239 tlb_flush_mmu(tlb); in tlb_remove_page()
247 __tlb_remove_tlb_entry (struct mmu_gather *tlb, pte_t *ptep, unsigned long address) in __tlb_remove_tlb_entry() argument
249 if (tlb->start_addr == ~0UL) in __tlb_remove_tlb_entry()
250 tlb->start_addr = address; in __tlb_remove_tlb_entry()
251 tlb->end_addr = address + PAGE_SIZE; in __tlb_remove_tlb_entry()
256 #define tlb_start_vma(tlb, vma) do { } while (0) argument
257 #define tlb_end_vma(tlb, vma) do { } while (0) argument
259 #define tlb_remove_tlb_entry(tlb, ptep, addr) \ argument
261 tlb->need_flush = 1; \
262 __tlb_remove_tlb_entry(tlb, ptep, addr); \
265 #define pte_free_tlb(tlb, ptep, address) \ argument
267 tlb->need_flush = 1; \
268 __pte_free_tlb(tlb, ptep, address); \
271 #define pmd_free_tlb(tlb, ptep, address) \ argument
273 tlb->need_flush = 1; \
274 __pmd_free_tlb(tlb, ptep, address); \
277 #define pud_free_tlb(tlb, pudp, address) \ argument
279 tlb->need_flush = 1; \
280 __pud_free_tlb(tlb, pudp, address); \