28 #include <linux/module.h>
29 #include <linux/time.h>
30 #include <linux/timex.h>
31 #include <linux/sched.h>
39 #include <asm/processor.h>
41 #include <asm/mmu_context.h>
43 #include <asm/setup.h>
45 #ifdef CONFIG_MIPS_MT_SMTC
68 static inline void set_cpu_sibling_map(
int cpu)
72 cpu_set(cpu, cpu_sibling_setup_map);
77 cpu_set(i, cpu_sibling_map[cpu]);
78 cpu_set(cpu, cpu_sibling_map[i]);
82 cpu_set(cpu, cpu_sibling_map[cpu]);
103 #ifdef CONFIG_MIPS_MT_SMTC
112 mips_clockevent_init();
113 mp_ops->init_secondary();
125 notify_cpu_starting(cpu);
129 set_cpu_sibling_map(cpu);
140 mp_ops->smp_finish();
151 generic_smp_call_function_single_interrupt();
152 generic_smp_call_function_interrupt();
184 set_cpu_sibling_map(0);
185 #ifndef CONFIG_HOTPLUG_CPU
200 mp_ops->boot_secondary(cpu, tidle);
218 static void flush_tlb_all_ipi(
void *
info)
228 static void flush_tlb_mm_ipi(
void *mm)
242 static inline void smp_on_other_tlbs(
void (*
func) (
void *
info),
void *info)
244 #ifndef CONFIG_MIPS_MT_SMTC
249 static inline void smp_on_each_tlb(
void (*
func) (
void *
info),
void *info)
253 smp_on_other_tlbs(
func, info);
277 smp_on_other_tlbs(flush_tlb_mm_ipi, mm);
297 static void flush_tlb_range_ipi(
void *
info)
316 smp_on_other_tlbs(flush_tlb_range_ipi, &fd);
329 static void flush_tlb_kernel_range_ipi(
void *
info)
346 static void flush_tlb_page_ipi(
void *
info)
362 smp_on_other_tlbs(flush_tlb_page_ipi, &fd);
375 static void flush_tlb_one_ipi(
void *
info)
377 unsigned long vaddr = (
unsigned long) info;
384 smp_on_each_tlb(flush_tlb_one_ipi, (
void *) vaddr);