sparc32: refactor smp boot
Introduce a common smp_callin() function to call from trampoline_32.S. Add platform specific functions to handle the platform details. This is in preparation for a patch that will unify the smp boot stuff for all architectures. sparc32 was significantly different to warrant this patch in preparation. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Acked-by: David S. Miller <davem@davemloft.net> Cc: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com> Acked-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
76968ad2ea
commit
f9fd3488f6
@@ -34,30 +34,19 @@ swap_ulong(volatile unsigned long *ptr, unsigned long val)
|
||||
return val;
|
||||
}
|
||||
|
||||
void __cpuinit smp4m_callin(void)
|
||||
void __cpuinit sun4m_cpu_pre_starting(void *arg)
|
||||
{
|
||||
}
|
||||
|
||||
void __cpuinit sun4m_cpu_pre_online(void *arg)
|
||||
{
|
||||
int cpuid = hard_smp_processor_id();
|
||||
|
||||
local_ops->cache_all();
|
||||
local_ops->tlb_all();
|
||||
|
||||
notify_cpu_starting(cpuid);
|
||||
|
||||
register_percpu_ce(cpuid);
|
||||
|
||||
calibrate_delay();
|
||||
smp_store_cpu_info(cpuid);
|
||||
|
||||
local_ops->cache_all();
|
||||
local_ops->tlb_all();
|
||||
|
||||
/*
|
||||
* Unblock the master CPU _only_ when the scheduler state
|
||||
* of all secondary CPUs will be up-to-date, so after
|
||||
* the SMP initialization the master will be just allowed
|
||||
* to call the scheduler code.
|
||||
/* Allow master to continue. The master will then give us the
|
||||
* go-ahead by setting the smp_commenced_mask and will wait without
|
||||
* timeouts until our setup is completed fully (signified by
|
||||
* our bit being set in the cpu_online_mask).
|
||||
*/
|
||||
/* Allow master to continue. */
|
||||
swap_ulong(&cpu_callin_map[cpuid], 1);
|
||||
|
||||
/* XXX: What's up with all the flushes? */
|
||||
@@ -75,10 +64,6 @@ void __cpuinit smp4m_callin(void)
|
||||
|
||||
while (!cpumask_test_cpu(cpuid, &smp_commenced_mask))
|
||||
mb();
|
||||
|
||||
local_irq_enable();
|
||||
|
||||
set_cpu_online(cpuid, true);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user