diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-07-23 19:15:24 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-08-19 20:12:41 -0400 |
commit | d4e167da4cb60910f6ac305aee03714937f70b71 (patch) | |
tree | 44a0faf402dd91024544b3450033b80524b25799 /arch/powerpc/include/asm | |
parent | 44c58ccc8dc25f78a4f641901f17092c93dd0458 (diff) |
powerpc/mm: Make low level TLB flush ops on BookE take additional args
We need to pass down whether the page is direct or indirect and we'll
need to pass the page size to _tlbil_va and _tlbivax_bcast
We also add a new low level _tlbil_pid_noind() which does a TLB flush
by PID but avoids flushing indirect entries if possible
This implements those new prototypes but defines them with inlines
or macros so that no additional arguments are actually passed on current
processors.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/include/asm')
-rw-r--r-- | arch/powerpc/include/asm/tlbflush.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/powerpc/include/asm/tlbflush.h b/arch/powerpc/include/asm/tlbflush.h index abbe3419d1dd..d50a380b2b6f 100644 --- a/arch/powerpc/include/asm/tlbflush.h +++ b/arch/powerpc/include/asm/tlbflush.h | |||
@@ -6,7 +6,7 @@ | |||
6 | * | 6 | * |
7 | * - flush_tlb_mm(mm) flushes the specified mm context TLB's | 7 | * - flush_tlb_mm(mm) flushes the specified mm context TLB's |
8 | * - flush_tlb_page(vma, vmaddr) flushes one page | 8 | * - flush_tlb_page(vma, vmaddr) flushes one page |
9 | * - local_flush_tlb_mm(mm) flushes the specified mm context on | 9 | * - local_flush_tlb_mm(mm, full) flushes the specified mm context on |
10 | * the local processor | 10 | * the local processor |
11 | * - local_flush_tlb_page(vma, vmaddr) flushes one page on the local processor | 11 | * - local_flush_tlb_page(vma, vmaddr) flushes one page on the local processor |
12 | * - flush_tlb_page_nohash(vma, vmaddr) flushes one page if SW loaded TLB | 12 | * - flush_tlb_page_nohash(vma, vmaddr) flushes one page if SW loaded TLB |
@@ -29,7 +29,8 @@ | |||
29 | * specific tlbie's | 29 | * specific tlbie's |
30 | */ | 30 | */ |
31 | 31 | ||
32 | #include <linux/mm.h> | 32 | struct vm_area_struct; |
33 | struct mm_struct; | ||
33 | 34 | ||
34 | #define MMU_NO_CONTEXT ((unsigned int)-1) | 35 | #define MMU_NO_CONTEXT ((unsigned int)-1) |
35 | 36 | ||
@@ -40,12 +41,18 @@ extern void flush_tlb_kernel_range(unsigned long start, unsigned long end); | |||
40 | extern void local_flush_tlb_mm(struct mm_struct *mm); | 41 | extern void local_flush_tlb_mm(struct mm_struct *mm); |
41 | extern void local_flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr); | 42 | extern void local_flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr); |
42 | 43 | ||
44 | extern void __local_flush_tlb_page(struct mm_struct *mm, unsigned long vmaddr, | ||
45 | int tsize, int ind); | ||
46 | |||
43 | #ifdef CONFIG_SMP | 47 | #ifdef CONFIG_SMP |
44 | extern void flush_tlb_mm(struct mm_struct *mm); | 48 | extern void flush_tlb_mm(struct mm_struct *mm); |
45 | extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr); | 49 | extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr); |
50 | extern void __flush_tlb_page(struct mm_struct *mm, unsigned long vmaddr, | ||
51 | int tsize, int ind); | ||
46 | #else | 52 | #else |
47 | #define flush_tlb_mm(mm) local_flush_tlb_mm(mm) | 53 | #define flush_tlb_mm(mm) local_flush_tlb_mm(mm) |
48 | #define flush_tlb_page(vma,addr) local_flush_tlb_page(vma,addr) | 54 | #define flush_tlb_page(vma,addr) local_flush_tlb_page(vma,addr) |
55 | #define __flush_tlb_page(mm,addr,p,i) __local_flush_tlb_page(mm,addr,p,i) | ||
49 | #endif | 56 | #endif |
50 | #define flush_tlb_page_nohash(vma,addr) flush_tlb_page(vma,addr) | 57 | #define flush_tlb_page_nohash(vma,addr) flush_tlb_page(vma,addr) |
51 | 58 | ||