All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mahesh Jagannath Salgaonkar <mahesh@linux.vnet.ibm.com>
To: Nicholas Piggin <npiggin@gmail.com>
Cc: linuxppc-dev <linuxppc-dev@ozlabs.org>,
	"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Laurent Dufour <ldufour@linux.vnet.ibm.com>
Subject: Re: [v3 PATCH 5/5] powerpc/pseries: Display machine check error details.
Date: Fri, 8 Jun 2018 11:58:34 +0530	[thread overview]
Message-ID: <e8b55035-417b-7180-5ed1-1e7decef4f87@linux.vnet.ibm.com> (raw)
In-Reply-To: <20180608115136.7a6db415@roar.ozlabs.ibm.com>

On 06/08/2018 07:21 AM, Nicholas Piggin wrote:
> On Thu, 07 Jun 2018 22:59:04 +0530
> Mahesh J Salgaonkar <mahesh@linux.vnet.ibm.com> wrote:
> 
>> From: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
>>
>> Extract the MCE error details from RTAS extended log and display it to
>> console.
>>
>> With this patch you should now see mce logs like below:
>>
>> [  142.371818] Severe Machine check interrupt [Recovered]
>> [  142.371822]   NIP [d00000000ca301b8]: init_module+0x1b8/0x338 [bork_kernel]
>> [  142.371822]   Initiator: CPU
>> [  142.371823]   Error type: SLB [Multihit]
>> [  142.371824]     Effective address: d00000000ca70000
>>
>> Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
>> ---
>>  arch/powerpc/include/asm/rtas.h      |    5 +
>>  arch/powerpc/platforms/pseries/ras.c |  128 +++++++++++++++++++++++++++++++++-
>>  2 files changed, 131 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h
>> index 3f2fba7ef23b..8100a95c133a 100644
>> --- a/arch/powerpc/include/asm/rtas.h
>> +++ b/arch/powerpc/include/asm/rtas.h
>> @@ -190,6 +190,11 @@ static inline uint8_t rtas_error_extended(const struct rtas_error_log *elog)
>>  	return (elog->byte1 & 0x04) >> 2;
>>  }
>>  
>> +static inline uint8_t rtas_error_initiator(const struct rtas_error_log *elog)
>> +{
>> +	return (elog->byte2 & 0xf0) >> 4;
>> +}
>> +
>>  #define rtas_error_type(x)	((x)->byte3)
>>  
>>  static inline
>> diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c
>> index e56759d92356..cd9446980092 100644
>> --- a/arch/powerpc/platforms/pseries/ras.c
>> +++ b/arch/powerpc/platforms/pseries/ras.c
>> @@ -422,7 +422,130 @@ int pSeries_system_reset_exception(struct pt_regs *regs)
>>  	return 0; /* need to perform reset */
>>  }
>>  
>> -static int mce_handle_error(struct rtas_error_log *errp)
>> +#define VAL_TO_STRING(ar, val)	((val < ARRAY_SIZE(ar)) ? ar[val] : "Unknown")
>> +
>> +static void pseries_print_mce_info(struct pt_regs *regs,
>> +				struct rtas_error_log *errp, int disposition)
>> +{
>> +	const char *level, *sevstr;
>> +	struct pseries_errorlog *pseries_log;
>> +	struct pseries_mc_errorlog *mce_log;
>> +	uint8_t error_type, err_sub_type;
>> +	uint8_t initiator = rtas_error_initiator(errp);
>> +	uint64_t addr;
>> +
>> +	static const char * const initiators[] = {
>> +		"Unknown",
>> +		"CPU",
>> +		"PCI",
>> +		"ISA",
>> +		"Memory",
>> +		"Power Mgmt",
>> +	};
>> +	static const char * const mc_err_types[] = {
>> +		"UE",
>> +		"SLB",
>> +		"ERAT",
>> +		"TLB",
>> +		"D-Cache",
>> +		"Unknown",
>> +		"I-Cache",
>> +	};
>> +	static const char * const mc_ue_types[] = {
>> +		"Indeterminate",
>> +		"Instruction fetch",
>> +		"Page table walk ifetch",
>> +		"Load/Store",
>> +		"Page table walk Load/Store",
>> +	};
>> +
>> +	/* SLB sub errors valid values are 0x0, 0x1, 0x2 */
>> +	static const char * const mc_slb_types[] = {
>> +		"Parity",
>> +		"Multihit",
>> +		"Indeterminate",
>> +	};
>> +
>> +	/* TLB and ERAT sub errors valid values are 0x1, 0x2, 0x3 */
>> +	static const char * const mc_soft_types[] = {
>> +		"Unknown",
>> +		"Parity",
>> +		"Multihit",
>> +		"Indeterminate",
>> +	};
>> +
>> +	pseries_log = get_pseries_errorlog(errp, PSERIES_ELOG_SECT_ID_MCE);
>> +	if (pseries_log == NULL)
>> +		return;
>> +
>> +	mce_log = (struct pseries_mc_errorlog *)pseries_log->data;
>> +
>> +	error_type = rtas_mc_error_type(mce_log);
>> +	err_sub_type = rtas_mc_error_sub_type(mce_log);
>> +
>> +	switch (rtas_error_severity(errp)) {
>> +	case RTAS_SEVERITY_NO_ERROR:
>> +		level = KERN_INFO;
>> +		sevstr = "Harmless";
>> +		break;
>> +	case RTAS_SEVERITY_WARNING:
>> +		level = KERN_WARNING;
>> +		sevstr = "";
>> +		break;
>> +	case RTAS_SEVERITY_ERROR:
>> +	case RTAS_SEVERITY_ERROR_SYNC:
>> +		level = KERN_ERR;
>> +		sevstr = "Severe";
>> +		break;
>> +	case RTAS_SEVERITY_FATAL:
>> +	default:
>> +		level = KERN_ERR;
>> +		sevstr = "Fatal";
>> +		break;
>> +	}
>> +
>> +	printk("%s%s Machine check interrupt [%s]\n", level, sevstr,
>> +		disposition == RTAS_DISP_FULLY_RECOVERED ?
>> +		"Recovered" : "Not recovered");
>> +	if (user_mode(regs)) {
>> +		printk("%s  NIP: [%016lx] PID: %d Comm: %s\n", level,
>> +			regs->nip, current->pid, current->comm);
>> +	} else {
>> +		printk("%s  NIP [%016lx]: %pS\n", level, regs->nip,
>> +			(void *)regs->nip);
>> +	}
> 
> I think it's probably still useful to print pid/comm for kernel mode
> faults if !in_interrupt()... I see you're basically taking kernel/mce.c
> and doing the same thing.
> 
> Is there any reasonable way to share code here?

I did think of doing that, but I wanted make this patch series simple
enough to be able to make backport easy for very old kernels. I will
work on consolidating the code as enhancement later.

Thanks,
-Mahesh.

  reply	other threads:[~2018-06-08  6:28 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-07 17:27 [v3 PATCH 0/5] powerpc/pseries: Machien check handler improvements Mahesh J Salgaonkar
2018-06-07 17:28 ` [v3 PATCH 1/5] powerpc/pseries: convert rtas_log_buf to linear allocation Mahesh J Salgaonkar
2018-06-08  1:31   ` Nicholas Piggin
2018-06-08  6:16     ` Mahesh Jagannath Salgaonkar
2018-06-07 17:28 ` [v3 PATCH 2/5] powerpc/pseries: Fix endainness while restoring of r3 in MCE handler Mahesh J Salgaonkar
2018-06-08  1:33   ` Nicholas Piggin
2018-06-08  6:50   ` Michael Ellerman
2018-06-08 10:31     ` Mahesh Jagannath Salgaonkar
2018-06-07 17:28 ` [v3 PATCH 3/5] powerpc/pseries: Define MCE error event section Mahesh J Salgaonkar
2018-06-07 17:28 ` [v3 PATCH 4/5] powerpc/pseries: Dump and flush SLB contents on SLB MCE errors Mahesh J Salgaonkar
2018-06-08  1:48   ` Nicholas Piggin
2018-06-08  6:19     ` Mahesh Jagannath Salgaonkar
2018-06-12 13:47   ` Michael Ellerman
2018-06-13  2:38     ` Aneesh Kumar K.V
2018-06-13  4:06       ` Michael Ellerman
2018-06-13  4:06         ` Aneesh Kumar K.V
2018-06-13  3:45     ` Mahesh Jagannath Salgaonkar
2018-06-07 17:29 ` [v3 PATCH 5/5] powerpc/pseries: Display machine check error details Mahesh J Salgaonkar
2018-06-08  1:51   ` Nicholas Piggin
2018-06-08  6:28     ` Mahesh Jagannath Salgaonkar [this message]
2018-07-02 18:01     ` Michal Suchánek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e8b55035-417b-7180-5ed1-1e7decef4f87@linux.vnet.ibm.com \
    --to=mahesh@linux.vnet.ibm.com \
    --cc=aneesh.kumar@linux.vnet.ibm.com \
    --cc=ldufour@linux.vnet.ibm.com \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=npiggin@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.