diff options
Diffstat (limited to 'arch/powerpc/kernel/setup-common.c')
| -rw-r--r-- | arch/powerpc/kernel/setup-common.c | 38 | 
1 files changed, 27 insertions, 11 deletions
| diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 2075322cd225..8fd3a70047f1 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c @@ -242,14 +242,6 @@ static int show_cpuinfo(struct seq_file *m, void *v)  	unsigned short maj;  	unsigned short min; -	/* We only show online cpus: disable preempt (overzealous, I -	 * knew) to prevent cpu going down. */ -	preempt_disable(); -	if (!cpu_online(cpu_id)) { -		preempt_enable(); -		return 0; -	} -  #ifdef CONFIG_SMP  	pvr = per_cpu(cpu_pvr, cpu_id);  #else @@ -358,9 +350,6 @@ static int show_cpuinfo(struct seq_file *m, void *v)  #ifdef CONFIG_SMP  	seq_printf(m, "\n");  #endif - -	preempt_enable(); -  	/* If this is the last cpu, print the summary */  	if (cpumask_next(cpu_id, cpu_online_mask) >= nr_cpu_ids)  		show_cpuinfo_summary(m); @@ -704,6 +693,30 @@ int check_legacy_ioport(unsigned long base_port)  }  EXPORT_SYMBOL(check_legacy_ioport); +static int ppc_panic_event(struct notifier_block *this, +                             unsigned long event, void *ptr) +{ +	/* +	 * If firmware-assisted dump has been registered then trigger +	 * firmware-assisted dump and let firmware handle everything else. +	 */ +	crash_fadump(NULL, ptr); +	ppc_md.panic(ptr);  /* May not return */ +	return NOTIFY_DONE; +} + +static struct notifier_block ppc_panic_block = { +	.notifier_call = ppc_panic_event, +	.priority = INT_MIN /* may not return; must be done last */ +}; + +void __init setup_panic(void) +{ +	if (!ppc_md.panic) +		return; +	atomic_notifier_chain_register(&panic_notifier_list, &ppc_panic_block); +} +  #ifdef CONFIG_CHECK_CACHE_COHERENCY  /*   * For platforms that have configurable cache-coherency.  This function @@ -848,6 +861,9 @@ void __init setup_arch(char **cmdline_p)  	/* Probe the machine type, establish ppc_md. */  	probe_machine(); +	/* Setup panic notifier if requested by the platform. */ +	setup_panic(); +  	/*  	 * Configure ppc_md.power_save (ppc32 only, 64-bit machines do  	 * it from their respective probe() function. |