20 #include <linux/module.h>
23 #include <linux/sched.h>
25 #include <asm/processor.h>
26 #include <asm/mmu_context.h>
28 #include <asm/cacheflush.h>
29 #include <asm/sections.h>
30 #include <asm/setup.h>
48 static inline void __cpuinit smp_store_cpu_info(
unsigned int cpu)
65 #ifndef CONFIG_HOTPLUG_CPU
83 #ifdef CONFIG_HOTPLUG_CPU
88 for (i = 0; i < 10; i++) {
92 pr_info(
"CPU %u is now offline\n", cpu);
100 pr_err(
"CPU %u didn't die...\n", cpu);
105 return cpu == 0 ? -
EPERM : 0;
108 void play_dead_common(
void)
155 clear_tasks_mm_cpumask(cpu);
193 notify_cpu_starting(cpu);
201 smp_store_cpu_info(cpu);
231 (
unsigned long)&stack_start +
sizeof(stack_start));
253 unsigned long bogosum = 0;
261 bogosum / (500000/
HZ),
262 (bogosum / (5000/
HZ)) % 100);
267 mp_ops->
send_ipi(cpu, SMP_MSG_RESCHEDULE);
280 mp_ops->
send_ipi(cpu, SMP_MSG_FUNCTION);
285 mp_ops->
send_ipi(cpu, SMP_MSG_FUNCTION_SINGLE);
293 mp_ops->
send_ipi(cpu, SMP_MSG_TIMER);
306 case SMP_MSG_FUNCTION:
307 generic_smp_call_function_interrupt();
309 case SMP_MSG_RESCHEDULE:
312 case SMP_MSG_FUNCTION_SINGLE:
313 generic_smp_call_function_single_interrupt();
331 static void flush_tlb_all_ipi(
void *
info)
341 static void flush_tlb_mm_ipi(
void *mm)
381 static void flush_tlb_range_ipi(
void *
info)
389 unsigned long start,
unsigned long end)
411 static void flush_tlb_kernel_range_ipi(
void *
info)
424 on_each_cpu(flush_tlb_kernel_range_ipi, (
void *)&fd, 1);
427 static void flush_tlb_page_ipi(
void *
info)
454 static void flush_tlb_one_ipi(
void *
info)