| 
									
										
										
										
											2008-07-17 21:55:51 -07:00
										 |  |  | #ifndef _SPARC64_TLBFLUSH_H
 | 
					
						
							|  |  |  | #define _SPARC64_TLBFLUSH_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/mm.h>
 | 
					
						
							|  |  |  | #include <asm/mmu_context.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* TSB flush operations. */ | 
					
						
							| 
									
										
										
										
											2011-05-24 17:11:50 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define TLB_BATCH_NR	192
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct tlb_batch { | 
					
						
							|  |  |  | 	struct mm_struct *mm; | 
					
						
							|  |  |  | 	unsigned long tlb_nr; | 
					
						
							|  |  |  | 	unsigned long vaddrs[TLB_BATCH_NR]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-17 21:55:51 -07:00
										 |  |  | extern void flush_tsb_kernel_range(unsigned long start, unsigned long end); | 
					
						
							| 
									
										
										
										
											2011-05-24 17:11:50 -07:00
										 |  |  | extern void flush_tsb_user(struct tlb_batch *tb); | 
					
						
							| 
									
										
										
										
											2008-07-17 21:55:51 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* TLB flush operations. */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern void flush_tlb_pending(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define flush_tlb_range(vma,start,end)	\
 | 
					
						
							|  |  |  | 	do { (void)(start); flush_tlb_pending(); } while (0) | 
					
						
							|  |  |  | #define flush_tlb_page(vma,addr)	flush_tlb_pending()
 | 
					
						
							|  |  |  | #define flush_tlb_mm(mm)		flush_tlb_pending()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Local cpu only.  */ | 
					
						
							|  |  |  | extern void __flush_tlb_all(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern void __flush_tlb_kernel_range(unsigned long start, unsigned long end); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef CONFIG_SMP
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define flush_tlb_kernel_range(start,end) \
 | 
					
						
							|  |  |  | do {	flush_tsb_kernel_range(start,end); \ | 
					
						
							|  |  |  | 	__flush_tlb_kernel_range(start,end); \ | 
					
						
							|  |  |  | } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #else /* CONFIG_SMP */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern void smp_flush_tlb_kernel_range(unsigned long start, unsigned long end); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define flush_tlb_kernel_range(start, end) \
 | 
					
						
							|  |  |  | do {	flush_tsb_kernel_range(start,end); \ | 
					
						
							|  |  |  | 	smp_flush_tlb_kernel_range(start, end); \ | 
					
						
							|  |  |  | } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* ! CONFIG_SMP */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* _SPARC64_TLBFLUSH_H */
 |