diff options
Diffstat (limited to 'arch/x86/mm/fault.c')
| -rw-r--r-- | arch/x86/mm/fault.c | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index fa71a5d12e87..a498ae1fbe66 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c @@ -769,6 +769,8 @@ show_signal_msg(struct pt_regs *regs, unsigned long error_code,  		unsigned long address, struct task_struct *tsk)  {  	const char *loglvl = task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG; +	/* This is a racy snapshot, but it's better than nothing. */ +	int cpu = raw_smp_processor_id();  	if (!unhandled_signal(tsk, SIGSEGV))  		return; @@ -782,6 +784,14 @@ show_signal_msg(struct pt_regs *regs, unsigned long error_code,  	print_vma_addr(KERN_CONT " in ", regs->ip); +	/* +	 * Dump the likely CPU where the fatal segfault happened. +	 * This can help identify faulty hardware. +	 */ +	printk(KERN_CONT " likely on CPU %d (core %d, socket %d)", cpu, +	       topology_core_id(cpu), topology_physical_package_id(cpu)); + +  	printk(KERN_CONT "\n");  	show_opcodes(regs, loglvl);  |