ppc: Minor smp changes for consistency with ppc64
This makes platform code use the smp_ops variable directly instead of ppc_md.smp_ops, removes the two unused `data' and `wait' arguments from the *_message_pass() functions, and removes the call to the never-implemented smp_ops->space_timers() function. Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
Родитель
46aab8c584
Коммит
7ed476d17f
|
@ -312,9 +312,9 @@ pmac_setup_arch(void)
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
/* Check for Core99 */
|
/* Check for Core99 */
|
||||||
if (find_devices("uni-n") || find_devices("u3"))
|
if (find_devices("uni-n") || find_devices("u3"))
|
||||||
ppc_md.smp_ops = &core99_smp_ops;
|
smp_ops = &core99_smp_ops;
|
||||||
else
|
else
|
||||||
ppc_md.smp_ops = &psurge_smp_ops;
|
smp_ops = &psurge_smp_ops;
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
|
|
||||||
pci_create_OF_bus_map();
|
pci_create_OF_bus_map();
|
||||||
|
|
|
@ -209,8 +209,7 @@ irqreturn_t psurge_primary_intr(int irq, void *d, struct pt_regs *regs)
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void smp_psurge_message_pass(int target, int msg, unsigned long data,
|
static void smp_psurge_message_pass(int target, int msg)
|
||||||
int wait)
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -627,7 +626,7 @@ void smp_core99_give_timebase(void)
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void smp_core99_message_pass(int target, int msg, unsigned long data, int wait)
|
void smp_core99_message_pass(int target, int msg)
|
||||||
{
|
{
|
||||||
cpumask_t mask = CPU_MASK_ALL;
|
cpumask_t mask = CPU_MASK_ALL;
|
||||||
/* make sure we're sending something that translates to an IPI */
|
/* make sure we're sending something that translates to an IPI */
|
||||||
|
|
|
@ -51,7 +51,7 @@ EXPORT_SYMBOL(cpu_online_map);
|
||||||
EXPORT_SYMBOL(cpu_possible_map);
|
EXPORT_SYMBOL(cpu_possible_map);
|
||||||
|
|
||||||
/* SMP operations for this machine */
|
/* SMP operations for this machine */
|
||||||
static struct smp_ops_t *smp_ops;
|
struct smp_ops_t *smp_ops;
|
||||||
|
|
||||||
/* all cpu mappings are 1-1 -- Cort */
|
/* all cpu mappings are 1-1 -- Cort */
|
||||||
volatile unsigned long cpu_callin_map[NR_CPUS];
|
volatile unsigned long cpu_callin_map[NR_CPUS];
|
||||||
|
@ -74,11 +74,11 @@ extern void __save_cpu_setup(void);
|
||||||
#define PPC_MSG_XMON_BREAK 3
|
#define PPC_MSG_XMON_BREAK 3
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
smp_message_pass(int target, int msg, unsigned long data, int wait)
|
smp_message_pass(int target, int msg)
|
||||||
{
|
{
|
||||||
if (smp_ops){
|
if (smp_ops) {
|
||||||
atomic_inc(&ipi_sent);
|
atomic_inc(&ipi_sent);
|
||||||
smp_ops->message_pass(target,msg,data,wait);
|
smp_ops->message_pass(target, msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ void smp_message_recv(int msg, struct pt_regs *regs)
|
||||||
void smp_send_tlb_invalidate(int cpu)
|
void smp_send_tlb_invalidate(int cpu)
|
||||||
{
|
{
|
||||||
if ( PVR_VER(mfspr(SPRN_PVR)) == 8 )
|
if ( PVR_VER(mfspr(SPRN_PVR)) == 8 )
|
||||||
smp_message_pass(MSG_ALL_BUT_SELF, PPC_MSG_INVALIDATE_TLB, 0, 0);
|
smp_message_pass(MSG_ALL_BUT_SELF, PPC_MSG_INVALIDATE_TLB);
|
||||||
}
|
}
|
||||||
|
|
||||||
void smp_send_reschedule(int cpu)
|
void smp_send_reschedule(int cpu)
|
||||||
|
@ -135,13 +135,13 @@ void smp_send_reschedule(int cpu)
|
||||||
*/
|
*/
|
||||||
/* This is only used if `cpu' is running an idle task,
|
/* This is only used if `cpu' is running an idle task,
|
||||||
so it will reschedule itself anyway... */
|
so it will reschedule itself anyway... */
|
||||||
smp_message_pass(cpu, PPC_MSG_RESCHEDULE, 0, 0);
|
smp_message_pass(cpu, PPC_MSG_RESCHEDULE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_XMON
|
#ifdef CONFIG_XMON
|
||||||
void smp_send_xmon_break(int cpu)
|
void smp_send_xmon_break(int cpu)
|
||||||
{
|
{
|
||||||
smp_message_pass(cpu, PPC_MSG_XMON_BREAK, 0, 0);
|
smp_message_pass(cpu, PPC_MSG_XMON_BREAK);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_XMON */
|
#endif /* CONFIG_XMON */
|
||||||
|
|
||||||
|
@ -224,7 +224,7 @@ static int __smp_call_function(void (*func) (void *info), void *info,
|
||||||
spin_lock(&call_lock);
|
spin_lock(&call_lock);
|
||||||
call_data = &data;
|
call_data = &data;
|
||||||
/* Send a message to all other CPUs and wait for them to respond */
|
/* Send a message to all other CPUs and wait for them to respond */
|
||||||
smp_message_pass(target, PPC_MSG_CALL_FUNCTION, 0, 0);
|
smp_message_pass(target, PPC_MSG_CALL_FUNCTION);
|
||||||
|
|
||||||
/* Wait for response */
|
/* Wait for response */
|
||||||
timeout = 1000000;
|
timeout = 1000000;
|
||||||
|
@ -294,7 +294,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||||
smp_store_cpu_info(smp_processor_id());
|
smp_store_cpu_info(smp_processor_id());
|
||||||
cpu_callin_map[smp_processor_id()] = 1;
|
cpu_callin_map[smp_processor_id()] = 1;
|
||||||
|
|
||||||
smp_ops = ppc_md.smp_ops;
|
|
||||||
if (smp_ops == NULL) {
|
if (smp_ops == NULL) {
|
||||||
printk("SMP not supported on this machine.\n");
|
printk("SMP not supported on this machine.\n");
|
||||||
return;
|
return;
|
||||||
|
@ -308,9 +307,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||||
/* Backup CPU 0 state */
|
/* Backup CPU 0 state */
|
||||||
__save_cpu_setup();
|
__save_cpu_setup();
|
||||||
|
|
||||||
if (smp_ops->space_timers)
|
|
||||||
smp_ops->space_timers(num_cpus);
|
|
||||||
|
|
||||||
for_each_cpu(cpu) {
|
for_each_cpu(cpu) {
|
||||||
if (cpu == smp_processor_id())
|
if (cpu == smp_processor_id())
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -553,7 +553,7 @@ chrp_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
ppc_md.smp_ops = &chrp_smp_ops;
|
smp_ops = &chrp_smp_ops;
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -575,6 +575,6 @@ void __init platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||||
ppc_md.pcibios_fixup_bus = gemini_pcibios_fixup;
|
ppc_md.pcibios_fixup_bus = gemini_pcibios_fixup;
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
ppc_md.smp_ops = &gemini_smp_ops;
|
smp_ops = &gemini_smp_ops;
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
}
|
}
|
||||||
|
|
|
@ -753,7 +753,7 @@ static int smp_hdpu_probe(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
smp_hdpu_message_pass(int target, int msg, unsigned long data, int wait)
|
smp_hdpu_message_pass(int target, int msg)
|
||||||
{
|
{
|
||||||
if (msg > 0x3) {
|
if (msg > 0x3) {
|
||||||
printk("SMP %d: smp_message_pass: unknown msg %d\n",
|
printk("SMP %d: smp_message_pass: unknown msg %d\n",
|
||||||
|
@ -949,7 +949,7 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||||
#endif /* CONFIG_SERIAL_TEXT_DEBUG */
|
#endif /* CONFIG_SERIAL_TEXT_DEBUG */
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
ppc_md.smp_ops = &hdpu_smp_ops;
|
smp_ops = &hdpu_smp_ops;
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
|
|
||||||
#if defined(CONFIG_SERIAL_MPSC) || defined(CONFIG_MV643XX_ETH)
|
#if defined(CONFIG_SERIAL_MPSC) || defined(CONFIG_MV643XX_ETH)
|
||||||
|
|
|
@ -330,9 +330,9 @@ pmac_setup_arch(void)
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
/* Check for Core99 */
|
/* Check for Core99 */
|
||||||
if (find_devices("uni-n") || find_devices("u3"))
|
if (find_devices("uni-n") || find_devices("u3"))
|
||||||
ppc_md.smp_ops = &core99_smp_ops;
|
smp_ops = &core99_smp_ops;
|
||||||
else
|
else
|
||||||
ppc_md.smp_ops = &psurge_smp_ops;
|
smp_ops = &psurge_smp_ops;
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
|
|
||||||
pci_create_OF_bus_map();
|
pci_create_OF_bus_map();
|
||||||
|
|
|
@ -209,8 +209,7 @@ irqreturn_t psurge_primary_intr(int irq, void *d, struct pt_regs *regs)
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void smp_psurge_message_pass(int target, int msg, unsigned long data,
|
static void smp_psurge_message_pass(int target, int msg)
|
||||||
int wait)
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
|
|
@ -903,6 +903,6 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||||
ppc_md.kgdb_map_scc = gen550_kgdb_map_scc;
|
ppc_md.kgdb_map_scc = gen550_kgdb_map_scc;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
ppc_md.smp_ops = &pplus_smp_ops;
|
smp_ops = &pplus_smp_ops;
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
}
|
}
|
||||||
|
|
|
@ -1160,6 +1160,6 @@ prep_init(unsigned long r3, unsigned long r4, unsigned long r5,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
ppc_md.smp_ops = &prep_smp_ops;
|
smp_ops = &prep_smp_ops;
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
}
|
}
|
||||||
|
|
|
@ -890,7 +890,7 @@ openpic_get_irq(struct pt_regs *regs)
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
void
|
void
|
||||||
smp_openpic_message_pass(int target, int msg, unsigned long data, int wait)
|
smp_openpic_message_pass(int target, int msg)
|
||||||
{
|
{
|
||||||
cpumask_t mask = CPU_MASK_ALL;
|
cpumask_t mask = CPU_MASK_ALL;
|
||||||
/* make sure we're sending something that translates to an IPI */
|
/* make sure we're sending something that translates to an IPI */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче