All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] powerpc64s: Print exception vector name alongside the trap number
@ 2018-04-18  9:02 Naveen N. Rao
  2018-04-18 23:14 ` Benjamin Herrenschmidt
  2018-09-05 13:57 ` Christophe LEROY
  0 siblings, 2 replies; 4+ messages in thread
From: Naveen N. Rao @ 2018-04-18  9:02 UTC (permalink / raw)
  To: Michael Ellerman; +Cc: linuxppc-dev

Print a small help text indicating the exception vector alongside the
trap number to make it easier while analyzing back traces. As an
example:

    Unable to handle kernel paging request for data at address 0x00000000
    Faulting instruction address: 0xc0000000006e3728
    Oops: Kernel access of bad area, sig: 11 [#1]
    LE SMP NR_CPUS=2048 NUMA PowerNV
    Modules linked in:
    CPU: 0 PID: 1 Comm: bash Not tainted 4.16.0-nnr #226
    NIP:  c0000000006e3728 LR: c0000000006e4774 CTR: c0000000006e3700
    REGS: c0000000f0aa3980 TRAP: 0300 (DSI)  Not tainted  (4.16.0-nnr)
    MSR:  9000000000009033 <SF,HV,EE,ME,IR,DR,RI,LE>  CR: 28222222  XER: 20000000
    CFAR: c0000000006e4770 DAR: 0000000000000000 DSISR: 42000000 SOFTE: 0

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
---
I find this useful to have in backtraces, instead of having to look it 
up. Some of the names could probably be tweaked a bit to be more 
sensible.

- Naveen

 arch/powerpc/kernel/process.c | 42 +++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 1237f13fed51..71bfe29af456 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -1414,6 +1414,42 @@ static void print_msr_bits(unsigned long val)
 #define LAST_VOLATILE	12
 #endif
 
+#ifdef CONFIG_PPC_BOOK3S_64
+static char *print_trap(unsigned long trapno)
+{
+	trapno &= 0xff0;
+	switch (trapno) {
+		case 0x100:	return "SRESET";
+		case 0x200:	return "MCE";
+		case 0x300:	return "DSI";
+		case 0x380:	return "DSISLB";
+		case 0x400:	return "ISI";
+		case 0x480:	return "ISISLB";
+		case 0x500:	return "EXT";
+		case 0x600:	return "ALIGN";
+		case 0x700:	return "PCHECK";
+		case 0x800:	return "FP";
+		case 0x900:	return "DEC";
+		case 0x980:	return "HDEC";
+		case 0xa00:	return "DBELL";
+		case 0xc00:	return "SC";
+		case 0xd00:	return "SSTEP";
+		case 0xe00:	return "HDSI";
+		case 0xe20:	return "HISI";
+		case 0xe40:	return "HEMUL";
+		case 0xe60:	return "HMI";
+		case 0xe80:	return "HDBELL";
+		case 0xea0:	return "HVIRT";
+		case 0xf00:	return "PMI";
+		case 0xf20:	return "ALTIVEC";
+		case 0xf40:	return "VSX";
+		case 0xf60:	return "UNAVAIL";
+		case 0xf80:	return "HUNAVAIL";
+	}
+	return "UNKNOWN";
+}
+#endif
+
 void show_regs(struct pt_regs * regs)
 {
 	int i, trap;
@@ -1422,8 +1458,14 @@ void show_regs(struct pt_regs * regs)
 
 	printk("NIP:  "REG" LR: "REG" CTR: "REG"\n",
 	       regs->nip, regs->link, regs->ctr);
+#ifdef CONFIG_PPC_BOOK3S_64
+	printk("REGS: %px TRAP: %04lx (%s)  %s  (%s)\n",
+	       regs, regs->trap, print_trap(regs->trap), print_tainted(),
+	       init_utsname()->release);
+#else
 	printk("REGS: %px TRAP: %04lx   %s  (%s)\n",
 	       regs, regs->trap, print_tainted(), init_utsname()->release);
+#endif
 	printk("MSR:  "REG" ", regs->msr);
 	print_msr_bits(regs->msr);
 	pr_cont("  CR: %08lx  XER: %08lx\n", regs->ccr, regs->xer);
-- 
2.17.0

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] powerpc64s: Print exception vector name alongside the trap number
  2018-04-18  9:02 [PATCH] powerpc64s: Print exception vector name alongside the trap number Naveen N. Rao
@ 2018-04-18 23:14 ` Benjamin Herrenschmidt
  2018-04-19  6:56   ` Naveen N. Rao
  2018-09-05 13:57 ` Christophe LEROY
  1 sibling, 1 reply; 4+ messages in thread
From: Benjamin Herrenschmidt @ 2018-04-18 23:14 UTC (permalink / raw)
  To: Naveen N. Rao, Michael Ellerman; +Cc: linuxppc-dev

On Wed, 2018-04-18 at 14:32 +0530, Naveen N. Rao wrote:
> 
> +#ifdef CONFIG_PPC_BOOK3S_64
> +static char *print_trap(unsigned long trapno)
> +{
> +	trapno &= 0xff0;
> +	switch (trapno) {
> +		case 0x100:	return "SRESET";
> +		case 0x200:	return "MCE";
> +		case 0x300:	return "DSI";
> +		case 0x380:	return "DSISLB";
> +		case 0x400:	return "ISI";
> +		case 0x480:	return "ISISLB";

380 and 480 should probably be "DSEG" and "ISEG" ... they may or may
not involve the SLB.

> +		case 0x500:	return "EXT";
> +		case 0x600:	return "ALIGN";
> +		case 0x700:	return "PCHECK";
> +		case 0x800:	return "FP";
> +		case 0x900:	return "DEC";
> +		case 0x980:	return "HDEC";
> +		case 0xa00:	return "DBELL";
> +		case 0xc00:	return "SC";
> +		case 0xd00:	return "SSTEP";
> +		case 0xe00:	return "HDSI";
> +		case 0xe20:	return "HISI";
> +		case 0xe40:	return "HEMUL";
> +		case 0xe60:	return "HMI";
> +		case 0xe80:	return "HDBELL";
> +		case 0xea0:	return "HVIRT";
> +		case 0xf00:	return "PMI";
> +		case 0xf20:	return "ALTIVEC";
> +		case 0xf40:	return "VSX";
> +		case 0xf60:	return "UNAVAIL";
> +		case 0xf80:	return "HUNAVAIL";
> +	}
> +	return "UNKNOWN";
> +}
> +#endif
> +
>  void show_regs(struct pt_regs * regs)
>  {
>  	int i, trap;
> @@ -1422,8 +1458,14 @@ void show_regs(struct pt_regs * regs)
>  
>  	printk("NIP:  "REG" LR: "REG" CTR: "REG"\n",
>  	       regs->nip, regs->link, regs->ctr);
> +#ifdef CONFIG_PPC_BOOK3S_64
> +	printk("REGS: %px TRAP: %04lx (%s)  %s  (%s)\n",
> +	       regs, regs->trap, print_trap(regs->trap), print_tainted(),
> +	       init_utsname()->release);
> +#else
>  	printk("REGS: %px TRAP: %04lx   %s  (%s)\n",
>  	       regs, regs->trap, print_tainted(), init_utsname()->release);
> +#endif
>  	printk("MSR:  "REG" ", regs->msr);
>  	print_msr_bits(regs->msr);
>  	pr_cont("  CR: %08lx  XER: %08lx\n", regs->ccr, regs->xer);

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] powerpc64s: Print exception vector name alongside the trap number
  2018-04-18 23:14 ` Benjamin Herrenschmidt
@ 2018-04-19  6:56   ` Naveen N. Rao
  0 siblings, 0 replies; 4+ messages in thread
From: Naveen N. Rao @ 2018-04-19  6:56 UTC (permalink / raw)
  To: Benjamin Herrenschmidt, Michael Ellerman; +Cc: linuxppc-dev

Benjamin Herrenschmidt wrote:
> On Wed, 2018-04-18 at 14:32 +0530, Naveen N. Rao wrote:
>>=20
>> +#ifdef CONFIG_PPC_BOOK3S_64
>> +static char *print_trap(unsigned long trapno)
>> +{
>> +	trapno &=3D 0xff0;
>> +	switch (trapno) {
>> +		case 0x100:	return "SRESET";
>> +		case 0x200:	return "MCE";
>> +		case 0x300:	return "DSI";
>> +		case 0x380:	return "DSISLB";
>> +		case 0x400:	return "ISI";
>> +		case 0x480:	return "ISISLB";
>=20
> 380 and 480 should probably be "DSEG" and "ISEG" ... they may or may
> not involve the SLB.

Ok, thanks for the review.

- Naveen

=

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] powerpc64s: Print exception vector name alongside the trap number
  2018-04-18  9:02 [PATCH] powerpc64s: Print exception vector name alongside the trap number Naveen N. Rao
  2018-04-18 23:14 ` Benjamin Herrenschmidt
@ 2018-09-05 13:57 ` Christophe LEROY
  1 sibling, 0 replies; 4+ messages in thread
From: Christophe LEROY @ 2018-09-05 13:57 UTC (permalink / raw)
  To: Naveen N. Rao, Michael Ellerman; +Cc: linuxppc-dev



Le 18/04/2018 à 11:02, Naveen N. Rao a écrit :
> Print a small help text indicating the exception vector alongside the
> trap number to make it easier while analyzing back traces. As an
> example:
> 
>      Unable to handle kernel paging request for data at address 0x00000000
>      Faulting instruction address: 0xc0000000006e3728
>      Oops: Kernel access of bad area, sig: 11 [#1]
>      LE SMP NR_CPUS=2048 NUMA PowerNV
>      Modules linked in:
>      CPU: 0 PID: 1 Comm: bash Not tainted 4.16.0-nnr #226
>      NIP:  c0000000006e3728 LR: c0000000006e4774 CTR: c0000000006e3700
>      REGS: c0000000f0aa3980 TRAP: 0300 (DSI)  Not tainted  (4.16.0-nnr)
>      MSR:  9000000000009033 <SF,HV,EE,ME,IR,DR,RI,LE>  CR: 28222222  XER: 20000000
>      CFAR: c0000000006e4770 DAR: 0000000000000000 DSISR: 42000000 SOFTE: 0
> 
> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
> ---
> I find this useful to have in backtraces, instead of having to look it
> up. Some of the names could probably be tweaked a bit to be more
> sensible.
> 
> - Naveen
> 
>   arch/powerpc/kernel/process.c | 42 +++++++++++++++++++++++++++++++++++
>   1 file changed, 42 insertions(+)
> 
> diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
> index 1237f13fed51..71bfe29af456 100644
> --- a/arch/powerpc/kernel/process.c
> +++ b/arch/powerpc/kernel/process.c
> @@ -1414,6 +1414,42 @@ static void print_msr_bits(unsigned long val)
>   #define LAST_VOLATILE	12
>   #endif
>   
> +#ifdef CONFIG_PPC_BOOK3S_64

Why not make something generic applicable to all platforms ?

Christophe

> +static char *print_trap(unsigned long trapno)
> +{
> +	trapno &= 0xff0;
> +	switch (trapno) {
> +		case 0x100:	return "SRESET";
> +		case 0x200:	return "MCE";
> +		case 0x300:	return "DSI";
> +		case 0x380:	return "DSISLB";
> +		case 0x400:	return "ISI";
> +		case 0x480:	return "ISISLB";
> +		case 0x500:	return "EXT";
> +		case 0x600:	return "ALIGN";
> +		case 0x700:	return "PCHECK";
> +		case 0x800:	return "FP";
> +		case 0x900:	return "DEC";
> +		case 0x980:	return "HDEC";
> +		case 0xa00:	return "DBELL";
> +		case 0xc00:	return "SC";
> +		case 0xd00:	return "SSTEP";
> +		case 0xe00:	return "HDSI";
> +		case 0xe20:	return "HISI";
> +		case 0xe40:	return "HEMUL";
> +		case 0xe60:	return "HMI";
> +		case 0xe80:	return "HDBELL";
> +		case 0xea0:	return "HVIRT";
> +		case 0xf00:	return "PMI";
> +		case 0xf20:	return "ALTIVEC";
> +		case 0xf40:	return "VSX";
> +		case 0xf60:	return "UNAVAIL";
> +		case 0xf80:	return "HUNAVAIL";
> +	}
> +	return "UNKNOWN";
> +}
> +#endif
> +
>   void show_regs(struct pt_regs * regs)
>   {
>   	int i, trap;
> @@ -1422,8 +1458,14 @@ void show_regs(struct pt_regs * regs)
>   
>   	printk("NIP:  "REG" LR: "REG" CTR: "REG"\n",
>   	       regs->nip, regs->link, regs->ctr);
> +#ifdef CONFIG_PPC_BOOK3S_64
> +	printk("REGS: %px TRAP: %04lx (%s)  %s  (%s)\n",
> +	       regs, regs->trap, print_trap(regs->trap), print_tainted(),
> +	       init_utsname()->release);
> +#else
>   	printk("REGS: %px TRAP: %04lx   %s  (%s)\n",
>   	       regs, regs->trap, print_tainted(), init_utsname()->release);
> +#endif
>   	printk("MSR:  "REG" ", regs->msr);
>   	print_msr_bits(regs->msr);
>   	pr_cont("  CR: %08lx  XER: %08lx\n", regs->ccr, regs->xer);
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-09-05 13:57 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-18  9:02 [PATCH] powerpc64s: Print exception vector name alongside the trap number Naveen N. Rao
2018-04-18 23:14 ` Benjamin Herrenschmidt
2018-04-19  6:56   ` Naveen N. Rao
2018-09-05 13:57 ` Christophe LEROY

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.