xref: /linux/arch/sparc/include/asm/tlb_64.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2a439fe51SSam Ravnborg #ifndef _SPARC64_TLB_H
3a439fe51SSam Ravnborg #define _SPARC64_TLB_H
4a439fe51SSam Ravnborg 
5a439fe51SSam Ravnborg #include <linux/swap.h>
6a439fe51SSam Ravnborg #include <linux/pagemap.h>
7a439fe51SSam Ravnborg #include <asm/tlbflush.h>
8a439fe51SSam Ravnborg #include <asm/mmu_context.h>
9a439fe51SSam Ravnborg 
10a439fe51SSam Ravnborg #ifdef CONFIG_SMP
11f05a6865SSam Ravnborg void smp_flush_tlb_pending(struct mm_struct *,
12a439fe51SSam Ravnborg 				  unsigned long, unsigned long *);
13a439fe51SSam Ravnborg #endif
14a439fe51SSam Ravnborg 
15a439fe51SSam Ravnborg #ifdef CONFIG_SMP
16f05a6865SSam Ravnborg void smp_flush_tlb_mm(struct mm_struct *mm);
17a439fe51SSam Ravnborg #define do_flush_tlb_mm(mm) smp_flush_tlb_mm(mm)
18a439fe51SSam Ravnborg #else
19a439fe51SSam Ravnborg #define do_flush_tlb_mm(mm) __flush_tlb_mm(CTX_HWBITS(mm->context), SECONDARY_CONTEXT)
20a439fe51SSam Ravnborg #endif
21a439fe51SSam Ravnborg 
22f05a6865SSam Ravnborg void __flush_tlb_pending(unsigned long, unsigned long, unsigned long *);
23f05a6865SSam Ravnborg void flush_tlb_pending(void);
24a439fe51SSam Ravnborg 
2590f08e39SPeter Zijlstra #define tlb_flush(tlb)	flush_tlb_pending()
2690f08e39SPeter Zijlstra 
270ed13259SPeter Zijlstra /*
280ed13259SPeter Zijlstra  * SPARC64's hardware TLB fill does not use the Linux page-tables
290ed13259SPeter Zijlstra  * and therefore we don't need a TLBI when freeing page-table pages.
300ed13259SPeter Zijlstra  */
310ed13259SPeter Zijlstra 
32*ff2e6d72SPeter Zijlstra #ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE
330ed13259SPeter Zijlstra #define tlb_needs_table_invalidate()	(false)
340ed13259SPeter Zijlstra #endif
350ed13259SPeter Zijlstra 
3690f08e39SPeter Zijlstra #include <asm-generic/tlb.h>
37a439fe51SSam Ravnborg 
38a439fe51SSam Ravnborg #endif /* _SPARC64_TLB_H */
39