Lines Matching refs:tlb
96 ia64_tlb_flush_mmu_tlbonly(struct mmu_gather *tlb, unsigned long start, unsigned long end) in ia64_tlb_flush_mmu_tlbonly() argument
98 tlb->need_flush = 0; in ia64_tlb_flush_mmu_tlbonly()
100 if (tlb->fullmm) { in ia64_tlb_flush_mmu_tlbonly()
106 flush_tlb_mm(tlb->mm); in ia64_tlb_flush_mmu_tlbonly()
121 struct vm_area_struct vma = TLB_FLUSH_VMA(tlb->mm, 0); 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 arch_tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, in arch_tlb_gather_mmu() argument
174 tlb->mm = mm; in arch_tlb_gather_mmu()
175 tlb->max = ARRAY_SIZE(tlb->local); in arch_tlb_gather_mmu()
176 tlb->pages = tlb->local; in arch_tlb_gather_mmu()
177 tlb->nr = 0; in arch_tlb_gather_mmu()
178 tlb->fullmm = !(start | (end+1)); in arch_tlb_gather_mmu()
179 tlb->start = start; in arch_tlb_gather_mmu()
180 tlb->end = end; in arch_tlb_gather_mmu()
181 tlb->start_addr = ~0UL; in arch_tlb_gather_mmu()
189 arch_tlb_finish_mmu(struct mmu_gather *tlb, in arch_tlb_finish_mmu() argument
193 tlb->need_flush = 1; in arch_tlb_finish_mmu()
198 ia64_tlb_flush_mmu(tlb, start, end); in arch_tlb_finish_mmu()
203 if (tlb->pages != tlb->local) in arch_tlb_finish_mmu()
204 free_pages((unsigned long)tlb->pages, 0); in arch_tlb_finish_mmu()
212 static inline bool __tlb_remove_page(struct mmu_gather *tlb, struct page *page) in __tlb_remove_page() argument
214 tlb->need_flush = 1; in __tlb_remove_page()
216 if (!tlb->nr && tlb->pages == tlb->local) in __tlb_remove_page()
217 __tlb_alloc_page(tlb); in __tlb_remove_page()
219 tlb->pages[tlb->nr++] = page; in __tlb_remove_page()
220 VM_WARN_ON(tlb->nr > tlb->max); in __tlb_remove_page()
221 if (tlb->nr == tlb->max) in __tlb_remove_page()
226 static inline void tlb_flush_mmu_tlbonly(struct mmu_gather *tlb) in tlb_flush_mmu_tlbonly() argument
228 ia64_tlb_flush_mmu_tlbonly(tlb, tlb->start_addr, tlb->end_addr); in tlb_flush_mmu_tlbonly()
231 static inline void tlb_flush_mmu_free(struct mmu_gather *tlb) in tlb_flush_mmu_free() argument
233 ia64_tlb_flush_mmu_free(tlb); in tlb_flush_mmu_free()
236 static inline void tlb_flush_mmu(struct mmu_gather *tlb) in tlb_flush_mmu() argument
238 ia64_tlb_flush_mmu(tlb, tlb->start_addr, tlb->end_addr); in tlb_flush_mmu()
241 static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) in tlb_remove_page() argument
243 if (__tlb_remove_page(tlb, page)) in tlb_remove_page()
244 tlb_flush_mmu(tlb); in tlb_remove_page()
247 static inline bool __tlb_remove_page_size(struct mmu_gather *tlb, in __tlb_remove_page_size() argument
250 return __tlb_remove_page(tlb, page); in __tlb_remove_page_size()
253 static inline void tlb_remove_page_size(struct mmu_gather *tlb, in tlb_remove_page_size() argument
256 return tlb_remove_page(tlb, page); in tlb_remove_page_size()
264 __tlb_remove_tlb_entry (struct mmu_gather *tlb, pte_t *ptep, unsigned long address) in __tlb_remove_tlb_entry() argument
266 if (tlb->start_addr == ~0UL) in __tlb_remove_tlb_entry()
267 tlb->start_addr = address; in __tlb_remove_tlb_entry()
268 tlb->end_addr = address + PAGE_SIZE; in __tlb_remove_tlb_entry()
273 #define tlb_start_vma(tlb, vma) do { } while (0) argument
274 #define tlb_end_vma(tlb, vma) do { } while (0) argument
276 #define tlb_remove_tlb_entry(tlb, ptep, addr) \ argument
278 tlb->need_flush = 1; \
279 __tlb_remove_tlb_entry(tlb, ptep, addr); \
282 #define tlb_remove_huge_tlb_entry(h, tlb, ptep, address) \ argument
283 tlb_remove_tlb_entry(tlb, ptep, address)
286 static inline void tlb_remove_check_page_size_change(struct mmu_gather *tlb, in tlb_remove_check_page_size_change() argument
291 #define pte_free_tlb(tlb, ptep, address) \ argument
293 tlb->need_flush = 1; \
294 __pte_free_tlb(tlb, ptep, address); \
297 #define pmd_free_tlb(tlb, ptep, address) \ argument
299 tlb->need_flush = 1; \
300 __pmd_free_tlb(tlb, ptep, address); \
303 #define pud_free_tlb(tlb, pudp, address) \ argument
305 tlb->need_flush = 1; \
306 __pud_free_tlb(tlb, pudp, address); \