Messages in this thread Patch in this message | | | From | "Shai Fultheim" <> | Subject | [PATCH] PER_CPU [3/4] - PER_CPU-cpu_tlbstate | Date | Fri, 9 Jul 2004 02:54:05 -0700 |
| |
[SECOND SUBBMITAL - Thanks for all the comments] Andrew,
Please find below one out of collection of patched that move NR_CPU array variables to the per-cpu area. Please consider applying, any comment will highly appreciated.
Patches (altogether) tested using make allmodconfig, and defconfig, and booted my system very nicely.
1/4. PER_CPU-cpu_gdt_table 2/4. PER_CPU-init_tss 3/4. PER_CPU-cpu_tlbstate 4/4. PER_CPU-irq_stat
PER_CPU-cpu_tlbstate: arch/i386/kernel/smp.c | 12 ++++++------ arch/i386/mach-voyager/voyager_smp.c | 12 ++++++------ include/asm-i386/mmu_context.h | 12 ++++++------ include/asm-i386/tlbflush.h | 2 +- 4 files changed, 19 insertions(+), 19 deletions(-)
Signed-off-by: Martin Hicks <mort@wildopensource.com> Signed-off-by: Shai Fultheim <shai@scalex86.org>
================================================================================= # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/07/09 01:15:31-07:00 shai@compile.(none) # tlbflush.h, mmu_context.h, voyager_smp.c, smp.c: # PER_CPU-cpu_tlbstate # Convert cpu_tlbstate into a per_cpu variable. # # Signed-off-by: Martin Hicks <mort@wildopensource.com> # Signed-off-by: Shai Fultheim <shai@scalex86.org> # # include/asm-i386/tlbflush.h # 2004/07/09 01:14:52-07:00 shai@compile.(none) +1 -1 # PER_CPU-cpu_tlbstate # # include/asm-i386/mmu_context.h # 2004/07/09 01:14:52-07:00 shai@compile.(none) +6 -6 # PER_CPU-cpu_tlbstate # # arch/i386/mach-voyager/voyager_smp.c # 2004/07/09 01:14:52-07:00 shai@compile.(none) +6 -6 # PER_CPU-cpu_tlbstate # # arch/i386/kernel/smp.c # 2004/07/09 01:14:52-07:00 shai@compile.(none) +6 -6 # PER_CPU-cpu_tlbstate # diff -Nru a/arch/i386/kernel/smp.c b/arch/i386/kernel/smp.c --- a/arch/i386/kernel/smp.c 2004-07-09 01:34:17 -07:00 +++ b/arch/i386/kernel/smp.c 2004-07-09 01:34:17 -07:00 @@ -104,7 +104,7 @@ * about nothing of note with C stepping upwards. */ -struct tlb_state cpu_tlbstate[NR_CPUS] __cacheline_aligned = {[0 ... NR_CPUS-1] = { &init_mm, 0, }}; +DEFINE_PER_CPU(struct tlb_state, cpu_tlbstate) ____cacheline_aligned = { &init_mm, 0, }; /* * the following functions deal with sending IPIs between CPUs. @@ -255,9 +255,9 @@ */ static inline void leave_mm (unsigned long cpu) { - if (cpu_tlbstate[cpu].state == TLBSTATE_OK) + if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_OK) BUG(); - cpu_clear(cpu, cpu_tlbstate[cpu].active_mm->cpu_vm_mask); + cpu_clear(cpu, per_cpu(cpu_tlbstate, cpu).active_mm->cpu_vm_mask); load_cr3(swapper_pg_dir); } @@ -324,8 +324,8 @@ * BUG(); */ - if (flush_mm == cpu_tlbstate[cpu].active_mm) { - if (cpu_tlbstate[cpu].state == TLBSTATE_OK) { + if (flush_mm == per_cpu(cpu_tlbstate, cpu).active_mm) { + if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_OK) { if (flush_va == FLUSH_ALL) local_flush_tlb(); else @@ -457,7 +457,7 @@ unsigned long cpu = smp_processor_id(); __flush_tlb_all(); - if (cpu_tlbstate[cpu].state == TLBSTATE_LAZY) + if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_LAZY) leave_mm(cpu); } diff -Nru a/arch/i386/mach-voyager/voyager_smp.c b/arch/i386/mach-voyager/voyager_smp.c --- a/arch/i386/mach-voyager/voyager_smp.c 2004-07-09 01:34:17 -07:00 +++ b/arch/i386/mach-voyager/voyager_smp.c 2004-07-09 01:34:17 -07:00 @@ -35,7 +35,7 @@ int reboot_smp = 0; /* TLB state -- visible externally, indexed physically */ -struct tlb_state cpu_tlbstate[NR_CPUS] __cacheline_aligned = {[0 ... NR_CPUS-1] = { &init_mm, 0 }}; +DEFINE_PER_CPU(struct tlb_state, cpu_tlbstate) ____cacheline_aligned = { &init_mm, 0 }; /* CPU IRQ affinity -- set to all ones initially */ static unsigned long cpu_irq_affinity[NR_CPUS] __cacheline_aligned = { [0 ... NR_CPUS-1] = ~0UL }; @@ -860,9 +860,9 @@ static inline void leave_mm (unsigned long cpu) { - if (cpu_tlbstate[cpu].state == TLBSTATE_OK) + if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_OK) BUG(); - cpu_clear(cpu, cpu_tlbstate[cpu].active_mm->cpu_vm_mask); + cpu_clear(cpu, per_cpu(cpu_tlbstate, cpu).active_mm->cpu_vm_mask); load_cr3(swapper_pg_dir); } @@ -883,8 +883,8 @@ smp_processor_id())); */ - if (flush_mm == cpu_tlbstate[cpu].active_mm) { - if (cpu_tlbstate[cpu].state == TLBSTATE_OK) { + if (flush_mm == per_cpu(cpu_tlbstate, cpu).active_mm) { + if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_OK) { if (flush_va == FLUSH_ALL) local_flush_tlb(); else @@ -1218,7 +1218,7 @@ unsigned long cpu = smp_processor_id(); __flush_tlb_all(); - if (cpu_tlbstate[cpu].state == TLBSTATE_LAZY) + if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_LAZY) leave_mm(cpu); } diff -Nru a/include/asm-i386/mmu_context.h b/include/asm-i386/mmu_context.h --- a/include/asm-i386/mmu_context.h 2004-07-09 01:34:17 -07:00 +++ b/include/asm-i386/mmu_context.h 2004-07-09 01:34:17 -07:00 @@ -18,8 +18,8 @@ { #ifdef CONFIG_SMP unsigned cpu = smp_processor_id(); - if (cpu_tlbstate[cpu].state == TLBSTATE_OK) - cpu_tlbstate[cpu].state = TLBSTATE_LAZY; + if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_OK) + per_cpu(cpu_tlbstate, cpu).state = TLBSTATE_LAZY; #endif } @@ -33,8 +33,8 @@ /* stop flush ipis for the previous mm */ cpu_clear(cpu, prev->cpu_vm_mask); #ifdef CONFIG_SMP - cpu_tlbstate[cpu].state = TLBSTATE_OK; - cpu_tlbstate[cpu].active_mm = next; + per_cpu(cpu_tlbstate, cpu).state = TLBSTATE_OK; + per_cpu(cpu_tlbstate, cpu).active_mm = next; #endif cpu_set(cpu, next->cpu_vm_mask); @@ -49,8 +49,8 @@ } #ifdef CONFIG_SMP else { - cpu_tlbstate[cpu].state = TLBSTATE_OK; - BUG_ON(cpu_tlbstate[cpu].active_mm != next); + per_cpu(cpu_tlbstate, cpu).state = TLBSTATE_OK; + BUG_ON(per_cpu(cpu_tlbstate, cpu).active_mm != next); if (!cpu_test_and_set(cpu, next->cpu_vm_mask)) { /* We were in lazy tlb mode and leave_mm disabled diff -Nru a/include/asm-i386/tlbflush.h b/include/asm-i386/tlbflush.h --- a/include/asm-i386/tlbflush.h 2004-07-09 01:34:17 -07:00 +++ b/include/asm-i386/tlbflush.h 2004-07-09 01:34:17 -07:00 @@ -131,7 +131,7 @@ int state; char __cacheline_padding[L1_CACHE_BYTES-8]; }; -extern struct tlb_state cpu_tlbstate[NR_CPUS]; +DECLARE_PER_CPU(struct tlb_state, cpu_tlbstate); #endif ================================================================================= ----------------- Shai Fultheim Scalex86.org
[unhandled content-type:application/octet-stream] | |