1 /* tlbflush.h: TLB flushing functions 2 * 3 * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. 4 * Written by David Howells (dhowells@redhat.com) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 9 * 2 of the License, or (at your option) any later version. 10 */ 11 12 #ifndef _ASM_TLBFLUSH_H 13 #define _ASM_TLBFLUSH_H 14 15 #include <linux/mm.h> 16 #include <asm/processor.h> 17 18 #ifdef CONFIG_MMU 19 20 #ifndef __ASSEMBLY__ 21 extern void asmlinkage __flush_tlb_all(void); 22 extern void asmlinkage __flush_tlb_mm(unsigned long contextid); 23 extern void asmlinkage __flush_tlb_page(unsigned long contextid, unsigned long start); 24 extern void asmlinkage __flush_tlb_range(unsigned long contextid, 25 unsigned long start, unsigned long end); 26 #endif /* !__ASSEMBLY__ */ 27 28 #define flush_tlb_all() \ 29 do { \ 30 preempt_disable(); \ 31 __flush_tlb_all(); \ 32 preempt_enable(); \ 33 } while(0) 34 35 #define flush_tlb_mm(mm) \ 36 do { \ 37 preempt_disable(); \ 38 __flush_tlb_mm((mm)->context.id); \ 39 preempt_enable(); \ 40 } while(0) 41 42 #define flush_tlb_range(vma,start,end) \ 43 do { \ 44 preempt_disable(); \ 45 __flush_tlb_range((vma)->vm_mm->context.id, start, end); \ 46 preempt_enable(); \ 47 } while(0) 48 49 #define flush_tlb_page(vma,addr) \ 50 do { \ 51 preempt_disable(); \ 52 __flush_tlb_page((vma)->vm_mm->context.id, addr); \ 53 preempt_enable(); \ 54 } while(0) 55 56 57 #define __flush_tlb_global() flush_tlb_all() 58 #define flush_tlb() flush_tlb_all() 59 #define flush_tlb_kernel_range(start, end) flush_tlb_all() 60 61 #else 62 63 #define flush_tlb() BUG() 64 #define flush_tlb_all() BUG() 65 #define flush_tlb_mm(mm) BUG() 66 #define flush_tlb_page(vma,addr) BUG() 67 #define flush_tlb_range(mm,start,end) BUG() 68 #define flush_tlb_kernel_range(start, end) BUG() 69 70 #endif 71 72 73 #endif /* _ASM_TLBFLUSH_H */ 74