diff options
Diffstat (limited to 'arch/x86/kernel/cpu/mcheck/mce.c')
| -rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce.c | 25 | 
1 files changed, 7 insertions, 18 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 3385ea26f68..ff1ae9b6464 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c @@ -105,20 +105,6 @@ static int			cpu_missing;  ATOMIC_NOTIFIER_HEAD(x86_mce_decoder_chain);  EXPORT_SYMBOL_GPL(x86_mce_decoder_chain); -static int default_decode_mce(struct notifier_block *nb, unsigned long val, -			       void *data) -{ -	pr_emerg(HW_ERR "No human readable MCE decoding support on this CPU type.\n"); -	pr_emerg(HW_ERR "Run the message through 'mcelog --ascii' to decode.\n"); - -	return NOTIFY_STOP; -} - -static struct notifier_block mce_dec_nb = { -	.notifier_call = default_decode_mce, -	.priority      = -1, -}; -  /* MCA banks polled by the period polling timer for corrected events */  DEFINE_PER_CPU(mce_banks_t, mce_poll_banks) = {  	[0 ... BITS_TO_LONGS(MAX_NR_BANKS)-1] = ~0UL @@ -212,6 +198,8 @@ void mce_log(struct mce *mce)  static void print_mce(struct mce *m)  { +	int ret = 0; +  	pr_emerg(HW_ERR "CPU %d: Machine Check Exception: %Lx Bank %d: %016Lx\n",  	       m->extcpu, m->mcgstatus, m->bank, m->status); @@ -239,7 +227,11 @@ static void print_mce(struct mce *m)  	 * Print out human-readable details about the MCE error,  	 * (if the CPU has an implementation for that)  	 */ -	atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, m); +	ret = atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, m); +	if (ret == NOTIFY_STOP) +		return; + +	pr_emerg_ratelimited(HW_ERR "Run the above through 'mcelog --ascii'\n");  }  #define PANIC_TIMEOUT 5 /* 5 seconds */ @@ -590,7 +582,6 @@ void machine_check_poll(enum mcp_flags flags, mce_banks_t *b)  		if (!(flags & MCP_DONTLOG) && !mce_dont_log_ce) {  			mce_log(&m);  			atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, &m); -			add_taint(TAINT_MACHINE_CHECK);  		}  		/* @@ -1722,8 +1713,6 @@ __setup("mce", mcheck_enable);  int __init mcheck_init(void)  { -	atomic_notifier_chain_register(&x86_mce_decoder_chain, &mce_dec_nb); -  	mcheck_intel_therm_init();  	return 0;  |