Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc: Create next_tlbcam_idx percpu variable for FSL_BOOKE

This is used to round-robin TLBCAM entries.

Signed-off-by: Becky Bruce <beckyb@kernel.crashing.org>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>

authored by

Becky Bruce and committed by
Kumar Gala
3160b097 f6ad160e

+24
+5
arch/powerpc/include/asm/mmu.h
··· 115 115 #ifndef __ASSEMBLY__ 116 116 #include <asm/cputable.h> 117 117 118 + #ifdef CONFIG_PPC_FSL_BOOK3E 119 + #include <asm/percpu.h> 120 + DECLARE_PER_CPU(int, next_tlbcam_idx); 121 + #endif 122 + 118 123 static inline int mmu_has_feature(unsigned long feature) 119 124 { 120 125 return (cur_cpu_spec->mmu_features & feature);
+4
arch/powerpc/kernel/smp.c
··· 305 305 static void __devinit smp_store_cpu_info(int id) 306 306 { 307 307 per_cpu(cpu_pvr, id) = mfspr(SPRN_PVR); 308 + #ifdef CONFIG_PPC_FSL_BOOK3E 309 + per_cpu(next_tlbcam_idx, id) 310 + = (mfspr(SPRN_TLB1CFG) & TLBnCFG_N_ENTRY) - 1; 311 + #endif 308 312 } 309 313 310 314 void __init smp_prepare_cpus(unsigned int max_cpus)
+9
arch/powerpc/mm/mem.c
··· 353 353 } 354 354 #endif /* CONFIG_HIGHMEM */ 355 355 356 + #if defined(CONFIG_PPC_FSL_BOOK3E) && !defined(CONFIG_SMP) 357 + /* 358 + * If smp is enabled, next_tlbcam_idx is initialized in the cpu up 359 + * functions.... do it here for the non-smp case. 360 + */ 361 + per_cpu(next_tlbcam_idx, smp_processor_id()) = 362 + (mfspr(SPRN_TLB1CFG) & TLBnCFG_N_ENTRY) - 1; 363 + #endif 364 + 356 365 printk(KERN_INFO "Memory: %luk/%luk available (%luk kernel code, " 357 366 "%luk reserved, %luk data, %luk bss, %luk init)\n", 358 367 nr_free_pages() << (PAGE_SHIFT-10),
+6
arch/powerpc/mm/tlb_nohash.c
··· 102 102 103 103 #endif /* CONFIG_PPC64 */ 104 104 105 + #ifdef CONFIG_PPC_FSL_BOOK3E 106 + /* next_tlbcam_idx is used to round-robin tlbcam entry assignment */ 107 + DEFINE_PER_CPU(int, next_tlbcam_idx); 108 + EXPORT_PER_CPU_SYMBOL(next_tlbcam_idx); 109 + #endif 110 + 105 111 /* 106 112 * Base TLB flushing operations: 107 113 *