diff options
| author | Jeff Garzik <jeff@garzik.org> | 2006-04-20 17:27:45 -0400 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2006-04-20 17:27:45 -0400 |
| commit | 9707b27100a48950f1e15e08a7c5028786e47f55 (patch) | |
| tree | 5745b1e7497ae1499a2e2e9e0a567996419ab34f /arch/mips/kernel/smp.c | |
| parent | 8fc65162a8f25929be80c8d6321a3479e92b5aae (diff) | |
| parent | 402a26f0c040077ed6f941eefac5a6971f0d5f40 (diff) | |
Merge branch 'master'
Diffstat (limited to 'arch/mips/kernel/smp.c')
| -rw-r--r-- | arch/mips/kernel/smp.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 78d171bfa331..d42f358754ad 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c | |||
| @@ -38,6 +38,10 @@ | |||
| 38 | #include <asm/mmu_context.h> | 38 | #include <asm/mmu_context.h> |
| 39 | #include <asm/smp.h> | 39 | #include <asm/smp.h> |
| 40 | 40 | ||
| 41 | #ifdef CONFIG_MIPS_MT_SMTC | ||
| 42 | #include <asm/mipsmtregs.h> | ||
| 43 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
| 44 | |||
| 41 | cpumask_t phys_cpu_present_map; /* Bitmask of available CPUs */ | 45 | cpumask_t phys_cpu_present_map; /* Bitmask of available CPUs */ |
| 42 | volatile cpumask_t cpu_callin_map; /* Bitmask of started secondaries */ | 46 | volatile cpumask_t cpu_callin_map; /* Bitmask of started secondaries */ |
| 43 | cpumask_t cpu_online_map; /* Bitmask of currently online CPUs */ | 47 | cpumask_t cpu_online_map; /* Bitmask of currently online CPUs */ |
| @@ -85,6 +89,10 @@ asmlinkage void start_secondary(void) | |||
| 85 | { | 89 | { |
| 86 | unsigned int cpu; | 90 | unsigned int cpu; |
| 87 | 91 | ||
| 92 | #ifdef CONFIG_MIPS_MT_SMTC | ||
| 93 | /* Only do cpu_probe for first TC of CPU */ | ||
| 94 | if ((read_c0_tcbind() & TCBIND_CURTC) == 0) | ||
| 95 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
| 88 | cpu_probe(); | 96 | cpu_probe(); |
| 89 | cpu_report(); | 97 | cpu_report(); |
| 90 | per_cpu_trap_init(); | 98 | per_cpu_trap_init(); |
| @@ -179,11 +187,13 @@ int smp_call_function (void (*func) (void *info), void *info, int retry, | |||
| 179 | if (wait) | 187 | if (wait) |
| 180 | while (atomic_read(&data.finished) != cpus) | 188 | while (atomic_read(&data.finished) != cpus) |
| 181 | barrier(); | 189 | barrier(); |
| 190 | call_data = NULL; | ||
| 182 | spin_unlock(&smp_call_lock); | 191 | spin_unlock(&smp_call_lock); |
| 183 | 192 | ||
| 184 | return 0; | 193 | return 0; |
| 185 | } | 194 | } |
| 186 | 195 | ||
| 196 | |||
| 187 | void smp_call_function_interrupt(void) | 197 | void smp_call_function_interrupt(void) |
| 188 | { | 198 | { |
| 189 | void (*func) (void *info) = call_data->func; | 199 | void (*func) (void *info) = call_data->func; |
| @@ -446,5 +456,3 @@ subsys_initcall(topology_init); | |||
| 446 | 456 | ||
| 447 | EXPORT_SYMBOL(flush_tlb_page); | 457 | EXPORT_SYMBOL(flush_tlb_page); |
| 448 | EXPORT_SYMBOL(flush_tlb_one); | 458 | EXPORT_SYMBOL(flush_tlb_one); |
| 449 | EXPORT_SYMBOL(cpu_data); | ||
| 450 | EXPORT_SYMBOL(synchronize_irq); | ||
