Commit 7ed476d1 authored by Paul Mackerras's avatar Paul Mackerras
Browse files

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: default avatarPaul Mackerras <paulus@samba.org>
parent 46aab8c5
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -312,9 +312,9 @@ pmac_setup_arch(void)
#ifdef CONFIG_SMP
	/* Check for Core99 */
	if (find_devices("uni-n") || find_devices("u3"))
		ppc_md.smp_ops = &core99_smp_ops;
		smp_ops = &core99_smp_ops;
	else
		ppc_md.smp_ops = &psurge_smp_ops;
		smp_ops = &psurge_smp_ops;
#endif /* CONFIG_SMP */

	pci_create_OF_bus_map();
+2 −3
Original line number Diff line number Diff line
@@ -209,8 +209,7 @@ irqreturn_t psurge_primary_intr(int irq, void *d, struct pt_regs *regs)
	return IRQ_HANDLED;
}

static void smp_psurge_message_pass(int target, int msg, unsigned long data,
					   int wait)
static void smp_psurge_message_pass(int target, int msg)
{
	int i;

@@ -627,7 +626,7 @@ void smp_core99_give_timebase(void)
	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;
	/* make sure we're sending something that translates to an IPI */
+8 −12
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ EXPORT_SYMBOL(cpu_online_map);
EXPORT_SYMBOL(cpu_possible_map);

/* 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 */
volatile unsigned long cpu_callin_map[NR_CPUS];
@@ -74,11 +74,11 @@ extern void __save_cpu_setup(void);
#define PPC_MSG_XMON_BREAK	3

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) {
		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)
{
	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)
@@ -135,13 +135,13 @@ void smp_send_reschedule(int cpu)
	 */
	/* This is only used if `cpu' is running an idle task,
	   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
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 */

@@ -224,7 +224,7 @@ static int __smp_call_function(void (*func) (void *info), void *info,
	spin_lock(&call_lock);
	call_data = &data;
	/* 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 */
	timeout = 1000000;
@@ -294,7 +294,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
        smp_store_cpu_info(smp_processor_id());
	cpu_callin_map[smp_processor_id()] = 1;

	smp_ops = ppc_md.smp_ops;
	if (smp_ops == NULL) {
		printk("SMP not supported on this machine.\n");
		return;
@@ -308,9 +307,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
	/* Backup CPU 0 state */
	__save_cpu_setup();

	if (smp_ops->space_timers)
		smp_ops->space_timers(num_cpus);

	for_each_cpu(cpu) {
		if (cpu == smp_processor_id())
			continue;
+1 −1
Original line number Diff line number Diff line
@@ -553,7 +553,7 @@ chrp_init(unsigned long r3, unsigned long r4, unsigned long r5,
#endif

#ifdef CONFIG_SMP
	ppc_md.smp_ops = &chrp_smp_ops;
	smp_ops = &chrp_smp_ops;
#endif /* CONFIG_SMP */

	/*
+1 −1
Original line number Diff line number Diff line
@@ -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;

#ifdef CONFIG_SMP
	ppc_md.smp_ops = &gemini_smp_ops;
	smp_ops = &gemini_smp_ops;
#endif /* CONFIG_SMP */
}
Loading