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

Commit 1ed2fd2d authored by Anton Blanchard's avatar Anton Blanchard Committed by Paul Mackerras
Browse files

[PATCH] ppc64: Fix for missing start-cpu rtas token



If the rtas start-cpu token doesnt exist then presume the cpu is already
spinning. If it isnt we will catch it later on when the cpu doesnt
respond.

Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 3238e9c9
Loading
Loading
Loading
Loading
+11 −2
Original line number Original line Diff line number Diff line
@@ -272,6 +272,7 @@ static inline int __devinit smp_startup_cpu(unsigned int lcpu)
	unsigned long start_here = __pa((u32)*((unsigned long *)
	unsigned long start_here = __pa((u32)*((unsigned long *)
					       pSeries_secondary_smp_init));
					       pSeries_secondary_smp_init));
	unsigned int pcpu;
	unsigned int pcpu;
	int start_cpu;


	if (cpu_isset(lcpu, of_spin_map))
	if (cpu_isset(lcpu, of_spin_map))
		/* Already started by OF and sitting in spin loop */
		/* Already started by OF and sitting in spin loop */
@@ -282,12 +283,20 @@ static inline int __devinit smp_startup_cpu(unsigned int lcpu)
	/* Fixup atomic count: it exited inside IRQ handler. */
	/* Fixup atomic count: it exited inside IRQ handler. */
	paca[lcpu].__current->thread_info->preempt_count	= 0;
	paca[lcpu].__current->thread_info->preempt_count	= 0;


	status = rtas_call(rtas_token("start-cpu"), 3, 1, NULL,
	/* 
			   pcpu, start_here, lcpu);
	 * If the RTAS start-cpu token does not exist then presume the
	 * cpu is already spinning.
	 */
	start_cpu = rtas_token("start-cpu");
	if (start_cpu == RTAS_UNKNOWN_SERVICE)
		return 1;

	status = rtas_call(start_cpu, 3, 1, NULL, pcpu, start_here, lcpu);
	if (status != 0) {
	if (status != 0) {
		printk(KERN_ERR "start-cpu failed: %i\n", status);
		printk(KERN_ERR "start-cpu failed: %i\n", status);
		return 0;
		return 0;
	}
	}

	return 1;
	return 1;
}
}