Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5e0797e5 authored by David S. Miller's avatar David S. Miller
Browse files

sparc64: Use function pointer for cross-call sending.



Initialize it using the smp_setup_processor_id() hook.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent abd9e698
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -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;