1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef _SPARC64_TLB_H 3*4882a593Smuzhiyun #define _SPARC64_TLB_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/swap.h> 6*4882a593Smuzhiyun #include <linux/pagemap.h> 7*4882a593Smuzhiyun #include <asm/tlbflush.h> 8*4882a593Smuzhiyun #include <asm/mmu_context.h> 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifdef CONFIG_SMP 11*4882a593Smuzhiyun void smp_flush_tlb_pending(struct mm_struct *, 12*4882a593Smuzhiyun unsigned long, unsigned long *); 13*4882a593Smuzhiyun #endif 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #ifdef CONFIG_SMP 16*4882a593Smuzhiyun void smp_flush_tlb_mm(struct mm_struct *mm); 17*4882a593Smuzhiyun #define do_flush_tlb_mm(mm) smp_flush_tlb_mm(mm) 18*4882a593Smuzhiyun #else 19*4882a593Smuzhiyun #define do_flush_tlb_mm(mm) __flush_tlb_mm(CTX_HWBITS(mm->context), SECONDARY_CONTEXT) 20*4882a593Smuzhiyun #endif 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun void __flush_tlb_pending(unsigned long, unsigned long, unsigned long *); 23*4882a593Smuzhiyun void flush_tlb_pending(void); 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define tlb_start_vma(tlb, vma) do { } while (0) 26*4882a593Smuzhiyun #define tlb_end_vma(tlb, vma) do { } while (0) 27*4882a593Smuzhiyun #define __tlb_remove_tlb_entry(tlb, ptep, address) do { } while (0) 28*4882a593Smuzhiyun #define tlb_flush(tlb) flush_tlb_pending() 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /* 31*4882a593Smuzhiyun * SPARC64's hardware TLB fill does not use the Linux page-tables 32*4882a593Smuzhiyun * and therefore we don't need a TLBI when freeing page-table pages. 33*4882a593Smuzhiyun */ 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE 36*4882a593Smuzhiyun #define tlb_needs_table_invalidate() (false) 37*4882a593Smuzhiyun #endif 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun #include <asm-generic/tlb.h> 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #endif /* _SPARC64_TLB_H */ 42