Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef __ASM_TLBFLUSH_H
0003 #define __ASM_TLBFLUSH_H
0004 
0005 #include <linux/mm.h>
0006 
0007 /*
0008  * TLB flushing:
0009  *
0010  *  - flush_tlb_all() flushes all processes TLB entries
0011  *  - flush_tlb_mm(mm) flushes the specified mm context TLB entries
0012  *  - flush_tlb_page(vma, vmaddr) flushes one page
0013  *  - flush_tlb_range(vma, start, end) flushes a range of pages
0014  *  - flush_tlb_kernel_range(start, end) flushes a range of kernel pages
0015  */
0016 extern void local_flush_tlb_all(void);
0017 extern void local_flush_tlb_range(struct vm_area_struct *vma,
0018     unsigned long start, unsigned long end);
0019 extern void local_flush_tlb_kernel_range(unsigned long start,
0020     unsigned long end);
0021 extern void local_flush_tlb_page(struct vm_area_struct *vma,
0022     unsigned long page);
0023 extern void local_flush_tlb_one(unsigned long vaddr);
0024 
0025 #include <asm/mmu_context.h>
0026 
0027 #ifdef CONFIG_SMP
0028 
0029 extern void flush_tlb_all(void);
0030 extern void flush_tlb_mm(struct mm_struct *);
0031 extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long,
0032     unsigned long);
0033 extern void flush_tlb_kernel_range(unsigned long, unsigned long);
0034 extern void flush_tlb_page(struct vm_area_struct *, unsigned long);
0035 extern void flush_tlb_one(unsigned long vaddr);
0036 
0037 #else /* CONFIG_SMP */
0038 
0039 #define flush_tlb_all()         local_flush_tlb_all()
0040 #define flush_tlb_mm(mm)        drop_mmu_context(mm)
0041 #define flush_tlb_range(vma, vmaddr, end)   local_flush_tlb_range(vma, vmaddr, end)
0042 #define flush_tlb_kernel_range(vmaddr,end) \
0043     local_flush_tlb_kernel_range(vmaddr, end)
0044 #define flush_tlb_page(vma, page)   local_flush_tlb_page(vma, page)
0045 #define flush_tlb_one(vaddr)        local_flush_tlb_one(vaddr)
0046 
0047 #endif /* CONFIG_SMP */
0048 
0049 #endif /* __ASM_TLBFLUSH_H */