21 #include <linux/module.h>
22 #include <asm/cacheflush.h>
37 static int stopping_cpus;
42 while (sent < nrecip) {
47 panic(
"hv_send_message returned %d", rc);
50 WARN_ONCE(rc == 0,
"hv_send_message() returned zero\n");
62 __send_IPI_many(&recip, 1, tag);
79 __send_IPI_many(recip, nrecip, tag);
95 static void smp_start_cpu_interrupt(
void)
101 static void smp_stop_cpu_interrupt(
void)
129 case MSG_TAG_START_CPU:
130 smp_start_cpu_interrupt();
133 case MSG_TAG_STOP_CPU:
134 smp_stop_cpu_interrupt();
137 case MSG_TAG_CALL_FUNCTION_MANY:
138 generic_smp_call_function_interrupt();
141 case MSG_TAG_CALL_FUNCTION_SINGLE:
142 generic_smp_call_function_single_interrupt();
146 panic(
"Unknown IPI message tag %d", tag);
161 static void ipi_flush_icache_range(
void *
info)
185 static struct irqaction resched_action = {
186 .handler = handle_reschedule_ipi,
188 .dev_id = handle_reschedule_ipi ,
203 if (hv_get_ipi_pte(tile,
KERNEL_PL, &pte) != 0)
204 panic(
"Failed to initialize IPI for cpu %d\n", cpu);