aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/include/asm
diff options
context:
space:
mode:
authorPeter Zijlstra <a.p.zijlstra@chello.nl>2011-05-24 20:11:48 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-05-25 11:39:13 -0400
commitd6bf29b44ddf3ca915f77b9383bee8b7a209f3fd (patch)
tree777e98ebcbf207ea8442e977bd93053bb23a8df8 /arch/powerpc/include/asm
parentd16dfc550f5326a4000f3322582a7c05dec91d7a (diff)
powerpc: mmu_gather rework
Fix up powerpc to the new mmu_gather stuff. PPC has an extra batching queue to RCU free the actual pagetable allocations, use the ARCH extentions for that for now. For the ppc64_tlb_batch, which tracks the vaddrs to unhash from the hardware hash-table, keep using per-cpu arrays but flush on context switch and use a TLF bit to track the lazy_mmu state. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: David Miller <davem@davemloft.net> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Russell King <rmk@arm.linux.org.uk> Cc: Paul Mundt <lethal@linux-sh.org> Cc: Jeff Dike <jdike@addtoit.com> Cc: Richard Weinberger <richard@nod.at> Cc: Tony Luck <tony.luck@intel.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Hugh Dickins <hughd@google.com> Cc: Mel Gorman <mel@csn.ul.ie> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: Nick Piggin <npiggin@kernel.dk> Cc: Namhyung Kim <namhyung@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/powerpc/include/asm')
-rw-r--r--arch/powerpc/include/asm/pgalloc.h4
-rw-r--r--arch/powerpc/include/asm/thread_info.h2
-rw-r--r--arch/powerpc/include/asm/tlb.h10
3 files changed, 14 insertions, 2 deletions
diff --git a/arch/powerpc/include/asm/pgalloc.h b/arch/powerpc/include/asm/pgalloc.h
index abe8532bd14e..df1b4cbb2e70 100644
--- a/arch/powerpc/include/asm/pgalloc.h
+++ b/arch/powerpc/include/asm/pgalloc.h
@@ -32,13 +32,13 @@ static inline void pte_free(struct mm_struct *mm, pgtable_t ptepage)
32 32
33#ifdef CONFIG_SMP 33#ifdef CONFIG_SMP
34extern void pgtable_free_tlb(struct mmu_gather *tlb, void *table, unsigned shift); 34extern void pgtable_free_tlb(struct mmu_gather *tlb, void *table, unsigned shift);
35extern void pte_free_finish(void); 35extern void pte_free_finish(struct mmu_gather *tlb);
36#else /* CONFIG_SMP */ 36#else /* CONFIG_SMP */
37static inline void pgtable_free_tlb(struct mmu_gather *tlb, void *table, unsigned shift) 37static inline void pgtable_free_tlb(struct mmu_gather *tlb, void *table, unsigned shift)
38{ 38{
39 pgtable_free(table, shift); 39 pgtable_free(table, shift);
40} 40}
41static inline void pte_free_finish(void) { } 41static inline void pte_free_finish(struct mmu_gather *tlb) { }
42#endif /* !CONFIG_SMP */ 42#endif /* !CONFIG_SMP */
43 43
44static inline void __pte_free_tlb(struct mmu_gather *tlb, struct page *ptepage, 44static inline void __pte_free_tlb(struct mmu_gather *tlb, struct page *ptepage,
diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h
index d8529ef13b23..37c353e8af7c 100644
--- a/arch/powerpc/include/asm/thread_info.h
+++ b/arch/powerpc/include/asm/thread_info.h
@@ -139,10 +139,12 @@ static inline struct thread_info *current_thread_info(void)
139#define TLF_NAPPING 0 /* idle thread enabled NAP mode */ 139#define TLF_NAPPING 0 /* idle thread enabled NAP mode */
140#define TLF_SLEEPING 1 /* suspend code enabled SLEEP mode */ 140#define TLF_SLEEPING 1 /* suspend code enabled SLEEP mode */
141#define TLF_RESTORE_SIGMASK 2 /* Restore signal mask in do_signal */ 141#define TLF_RESTORE_SIGMASK 2 /* Restore signal mask in do_signal */
142#define TLF_LAZY_MMU 3 /* tlb_batch is active */
142 143
143#define _TLF_NAPPING (1 << TLF_NAPPING) 144#define _TLF_NAPPING (1 << TLF_NAPPING)
144#define _TLF_SLEEPING (1 << TLF_SLEEPING) 145#define _TLF_SLEEPING (1 << TLF_SLEEPING)
145#define _TLF_RESTORE_SIGMASK (1 << TLF_RESTORE_SIGMASK) 146#define _TLF_RESTORE_SIGMASK (1 << TLF_RESTORE_SIGMASK)
147#define _TLF_LAZY_MMU (1 << TLF_LAZY_MMU)
146 148
147#ifndef __ASSEMBLY__ 149#ifndef __ASSEMBLY__
148#define HAVE_SET_RESTORE_SIGMASK 1 150#define HAVE_SET_RESTORE_SIGMASK 1
diff --git a/arch/powerpc/include/asm/tlb.h b/arch/powerpc/include/asm/tlb.h
index e2b428b0f7ba..8f0ed7adcd12 100644
--- a/arch/powerpc/include/asm/tlb.h
+++ b/arch/powerpc/include/asm/tlb.h
@@ -28,6 +28,16 @@
28#define tlb_start_vma(tlb, vma) do { } while (0) 28#define tlb_start_vma(tlb, vma) do { } while (0)
29#define tlb_end_vma(tlb, vma) do { } while (0) 29#define tlb_end_vma(tlb, vma) do { } while (0)
30 30
31#define HAVE_ARCH_MMU_GATHER 1
32
33struct pte_freelist_batch;
34
35struct arch_mmu_gather {
36 struct pte_freelist_batch *batch;
37};
38
39#define ARCH_MMU_GATHER_INIT (struct arch_mmu_gather){ .batch = NULL, }
40
31extern void tlb_flush(struct mmu_gather *tlb); 41extern void tlb_flush(struct mmu_gather *tlb);
32 42
33/* Get the generic bits... */ 43/* Get the generic bits... */