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

Commit 674fa677 authored by Michael Ellerman's avatar Michael Ellerman Committed by Paul Mackerras
Browse files

[POWERPC] Only enable cpu hotplug via RTAS if the required firmware support is found



To support cpu hotplug on pseries we require two RTAS tokens.  The cpu
hotplug machinery should only be wired up if these tokens are found in
the device tree.

Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 413f7c40
Loading
Loading
Loading
Loading
+11 −6
Original line number Original line Diff line number Diff line
@@ -64,6 +64,8 @@ static void pSeries_mach_cpu_die(void)
	for(;;);
	for(;;);
}
}


static int qcss_tok;	/* query-cpu-stopped-state token */

/* Get state of physical CPU.
/* Get state of physical CPU.
 * Return codes:
 * Return codes:
 *	0	- The processor is in the RTAS stopped state
 *	0	- The processor is in the RTAS stopped state
@@ -74,12 +76,8 @@ static void pSeries_mach_cpu_die(void)
 */
 */
static int query_cpu_stopped(unsigned int pcpu)
static int query_cpu_stopped(unsigned int pcpu)
{
{
	int cpu_status;
	int cpu_status, status;
	int status, qcss_tok;


	qcss_tok = rtas_token("query-cpu-stopped-state");
	if (qcss_tok == RTAS_UNKNOWN_SERVICE)
		return -1;
	status = rtas_call(qcss_tok, 1, 2, &cpu_status, pcpu);
	status = rtas_call(qcss_tok, 1, 2, &cpu_status, pcpu);
	if (status != 0) {
	if (status != 0) {
		printk(KERN_ERR
		printk(KERN_ERR
@@ -254,9 +252,16 @@ static struct notifier_block pSeries_smp_nb = {
static int __init pseries_cpu_hotplug_init(void)
static int __init pseries_cpu_hotplug_init(void)
{
{
	rtas_stop_self_args.token = rtas_token("stop-self");
	rtas_stop_self_args.token = rtas_token("stop-self");
	qcss_tok = rtas_token("query-cpu-stopped-state");


	ppc_md.cpu_die = pSeries_mach_cpu_die;
	if (rtas_stop_self_args.token == RTAS_UNKNOWN_SERVICE ||
			qcss_tok == RTAS_UNKNOWN_SERVICE) {
		printk(KERN_INFO "CPU Hotplug not supported by firmware "
				"- disabling.\n");
		return 0;
	}


	ppc_md.cpu_die = pSeries_mach_cpu_die;
	smp_ops->cpu_disable = pSeries_cpu_disable;
	smp_ops->cpu_disable = pSeries_cpu_disable;
	smp_ops->cpu_die = pSeries_cpu_die;
	smp_ops->cpu_die = pSeries_cpu_die;