sparc64: Use function pointer for cross-call sending.
Initialize it using the smp_setup_processor_id() hook. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
abd9e69828
commit
5e0797e5b8
1 changed files with 13 additions and 6 deletions
|
@ -756,6 +756,8 @@ static void hypervisor_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t
|
|||
printk("]\n");
|
||||
}
|
||||
|
||||
static void (*xcall_deliver)(u64, u64, u64, cpumask_t);
|
||||
|
||||
/* Send cross call to all processors mentioned in MASK
|
||||
* except self.
|
||||
*/
|
||||
|
@ -767,12 +769,7 @@ static void smp_cross_call_masked(unsigned long *func, u32 ctx, u64 data1, u64 d
|
|||
cpus_and(mask, mask, cpu_online_map);
|
||||
cpu_clear(this_cpu, mask);
|
||||
|
||||
if (tlb_type == spitfire)
|
||||
spitfire_xcall_deliver(data0, data1, data2, mask);
|
||||
else if (tlb_type == cheetah || tlb_type == cheetah_plus)
|
||||
cheetah_xcall_deliver(data0, data1, data2, mask);
|
||||
else
|
||||
hypervisor_xcall_deliver(data0, data1, data2, mask);
|
||||
xcall_deliver(data0, data1, data2, mask);
|
||||
/* NOTE: Caller runs local copy on master. */
|
||||
|
||||
put_cpu();
|
||||
|
@ -1202,6 +1199,16 @@ void __devinit smp_prepare_boot_cpu(void)
|
|||
{
|
||||
}
|
||||
|
||||
void __init smp_setup_processor_id(void)
|
||||
{
|
||||
if (tlb_type == spitfire)
|
||||
xcall_deliver = spitfire_xcall_deliver;
|
||||
else if (tlb_type == cheetah || tlb_type == cheetah_plus)
|
||||
xcall_deliver = cheetah_xcall_deliver;
|
||||
else
|
||||
xcall_deliver = hypervisor_xcall_deliver;
|
||||
}
|
||||
|
||||
void __devinit smp_fill_in_sib_core_maps(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
|
Loading…
Reference in a new issue