diff options
author | Graf Yang <graf.yang@analog.com> | 2010-02-01 01:07:50 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2010-03-09 00:30:50 -0500 |
commit | 718340f62900ed44046d2b0f74d0dec7cf844194 (patch) | |
tree | 974cf52038196598c653902de3da83ca96ee3792 /arch/blackfin/include | |
parent | 6c2b7072a7035837998da38809f98e4182e4c41c (diff) |
Blackfin: rewrite resync_core_{i,d}cache() SMP logic to avoid per_cpu data
This functions are implicitly called by core functions like cpu_relax(),
and since those functions may be called early on before common code has
initialized the per-cpu data area, we need to tweak the stats gathering.
Now the statistics are maintained in common bss which makes these funcs
safe to use as soon as the C runtime env is setup.
Signed-off-by: Graf Yang <graf.yang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'arch/blackfin/include')
-rw-r--r-- | arch/blackfin/include/asm/cpu.h | 2 | ||||
-rw-r--r-- | arch/blackfin/include/asm/smp.h | 7 |
2 files changed, 7 insertions, 2 deletions
diff --git a/arch/blackfin/include/asm/cpu.h b/arch/blackfin/include/asm/cpu.h index b191dc662bd8..16883e582e3c 100644 --- a/arch/blackfin/include/asm/cpu.h +++ b/arch/blackfin/include/asm/cpu.h | |||
@@ -17,8 +17,6 @@ struct blackfin_cpudata { | |||
17 | struct task_struct *idle; | 17 | struct task_struct *idle; |
18 | unsigned int imemctl; | 18 | unsigned int imemctl; |
19 | unsigned int dmemctl; | 19 | unsigned int dmemctl; |
20 | unsigned long dcache_invld_count; | ||
21 | unsigned long icache_invld_count; | ||
22 | }; | 20 | }; |
23 | 21 | ||
24 | DECLARE_PER_CPU(struct blackfin_cpudata, cpu_data); | 22 | DECLARE_PER_CPU(struct blackfin_cpudata, cpu_data); |
diff --git a/arch/blackfin/include/asm/smp.h b/arch/blackfin/include/asm/smp.h index 7f26de09ca9c..f5b537967116 100644 --- a/arch/blackfin/include/asm/smp.h +++ b/arch/blackfin/include/asm/smp.h | |||
@@ -24,6 +24,13 @@ struct corelock_slot { | |||
24 | }; | 24 | }; |
25 | extern struct corelock_slot corelock; | 25 | extern struct corelock_slot corelock; |
26 | 26 | ||
27 | #ifdef __ARCH_SYNC_CORE_ICACHE | ||
28 | extern unsigned long icache_invld_count[NR_CPUS]; | ||
29 | #endif | ||
30 | #ifdef __ARCH_SYNC_CORE_DCACHE | ||
31 | extern unsigned long dcache_invld_count[NR_CPUS]; | ||
32 | #endif | ||
33 | |||
27 | void smp_icache_flush_range_others(unsigned long start, | 34 | void smp_icache_flush_range_others(unsigned long start, |
28 | unsigned long end); | 35 | unsigned long end); |
29 | #ifdef CONFIG_HOTPLUG_CPU | 36 | #ifdef CONFIG_HOTPLUG_CPU |