Commit a9c59264 authored by Paul Mackerras's avatar Paul Mackerras

powerpc: Move smp_mpic_message_pass into mpic.c

Having it here rather than in arch/ppc64/kernel/smp.c means that
we can use it on 32-bit SMP systems easily with ARCH=powerpc.
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent d8699e65
...@@ -904,4 +904,25 @@ void mpic_request_ipis(void) ...@@ -904,4 +904,25 @@ void mpic_request_ipis(void)
printk("IPIs requested... \n"); printk("IPIs requested... \n");
} }
void smp_mpic_message_pass(int target, int msg)
{
/* make sure we're sending something that translates to an IPI */
if ((unsigned int)msg > 3) {
printk("SMP %d: smp_message_pass: unknown msg %d\n",
smp_processor_id(), msg);
return;
}
switch (target) {
case MSG_ALL:
mpic_send_ipi(msg, 0xffffffff);
break;
case MSG_ALL_BUT_SELF:
mpic_send_ipi(msg, 0xffffffff & ~(1 << smp_processor_id()));
break;
default:
mpic_send_ipi(msg, 1 << target);
break;
}
}
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
...@@ -69,28 +69,6 @@ void smp_call_function_interrupt(void); ...@@ -69,28 +69,6 @@ void smp_call_function_interrupt(void);
int smt_enabled_at_boot = 1; int smt_enabled_at_boot = 1;
#ifdef CONFIG_MPIC #ifdef CONFIG_MPIC
void smp_mpic_message_pass(int target, int msg)
{
/* make sure we're sending something that translates to an IPI */
if ( msg > 0x3 ){
printk("SMP %d: smp_message_pass: unknown msg %d\n",
smp_processor_id(), msg);
return;
}
switch ( target )
{
case MSG_ALL:
mpic_send_ipi(msg, 0xffffffff);
break;
case MSG_ALL_BUT_SELF:
mpic_send_ipi(msg, 0xffffffff & ~(1 << smp_processor_id()));
break;
default:
mpic_send_ipi(msg, 1 << target);
break;
}
}
int __init smp_mpic_probe(void) int __init smp_mpic_probe(void)
{ {
int nr_cpus; int nr_cpus;
......
...@@ -273,6 +273,9 @@ extern void mpic_request_ipis(void); ...@@ -273,6 +273,9 @@ extern void mpic_request_ipis(void);
/* Send an IPI (non offseted number 0..3) */ /* Send an IPI (non offseted number 0..3) */
extern void mpic_send_ipi(unsigned int ipi_no, unsigned int cpu_mask); extern void mpic_send_ipi(unsigned int ipi_no, unsigned int cpu_mask);
/* Send a message (IPI) to a given target (cpu number or MSG_*) */
void smp_mpic_message_pass(int target, int msg);
/* Fetch interrupt from a given mpic */ /* Fetch interrupt from a given mpic */
extern int mpic_get_one_irq(struct mpic *mpic, struct pt_regs *regs); extern int mpic_get_one_irq(struct mpic *mpic, struct pt_regs *regs);
/* This one gets to the primary mpic */ /* This one gets to the primary mpic */
......
...@@ -77,7 +77,6 @@ extern int smt_enabled_at_boot; ...@@ -77,7 +77,6 @@ extern int smt_enabled_at_boot;
extern int smp_mpic_probe(void); extern int smp_mpic_probe(void);
extern void smp_mpic_setup_cpu(int cpu); extern void smp_mpic_setup_cpu(int cpu);
extern void smp_mpic_message_pass(int target, int msg);
extern void smp_generic_kick_cpu(int nr); extern void smp_generic_kick_cpu(int nr);
extern void smp_generic_give_timebase(void); extern void smp_generic_give_timebase(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment