Re: [PATCH 6/7] powerpc/traps: Print signal name for unhandled signals

2018-07-25 Thread Murilo Opsfelder Araujo
Hi, Christophe.

On Wed, Jul 25, 2018 at 05:49:27PM +0200, LEROY Christophe wrote:
> Murilo Opsfelder Araujo  a écrit :
>
> > This adds a human-readable name in the unhandled signal message.
> >
> > Before this patch, a page fault looked like:
> >
> > Jul 11 16:04:11 localhost kernel: pandafault[6303]: unhandled signal
> > 11 at 17d0 nip 161c lr 7fff93c55100 code 2
> > in pandafault[1000+1]
> >
> > After this patch, a page fault looks like:
> >
> > Jul 11 18:14:48 localhost kernel: pandafault[6352]: segfault (11) at
> > 00013a2a09f8 nip 00013a2a086c lr 7fffb63e5100 code 2 in
> > pandafault[13a2a+1]
> >
> > Signed-off-by: Murilo Opsfelder Araujo 
> > ---
> >  arch/powerpc/kernel/traps.c | 43 +
> >  1 file changed, 39 insertions(+), 4 deletions(-)
> >
> > diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
> > index e6c43ef9fb50..e55ee639d010 100644
> > --- a/arch/powerpc/kernel/traps.c
> > +++ b/arch/powerpc/kernel/traps.c
> > @@ -96,6 +96,41 @@ EXPORT_SYMBOL(__debugger_fault_handler);
> >  #define TM_DEBUG(x...) do { } while(0)
> >  #endif
> >
> > +static const char *signames[SIGRTMIN + 1] = {
> > +   "UNKNOWN",
> > +   "SIGHUP",   // 1
> > +   "SIGINT",   // 2
> > +   "SIGQUIT",  // 3
> > +   "SIGILL",   // 4
> > +   "unhandled trap",   // 5 = SIGTRAP
> > +   "SIGABRT",  // 6 = SIGIOT
> > +   "bus error",// 7 = SIGBUS
> > +   "floating point exception", // 8 = SIGFPE
> > +   "illegal instruction",  // 9 = SIGILL
> > +   "SIGUSR1",  // 10
> > +   "segfault", // 11 = SIGSEGV
> > +   "SIGUSR2",  // 12
> > +   "SIGPIPE",  // 13
> > +   "SIGALRM",  // 14
> > +   "SIGTERM",  // 15
> > +   "SIGSTKFLT",// 16
> > +   "SIGCHLD",  // 17
> > +   "SIGCONT",  // 18
> > +   "SIGSTOP",  // 19
> > +   "SIGTSTP",  // 20
> > +   "SIGTTIN",  // 21
> > +   "SIGTTOU",  // 22
> > +   "SIGURG",   // 23
> > +   "SIGXCPU",  // 24
> > +   "SIGXFSZ",  // 25
> > +   "SIGVTALRM",// 26
> > +   "SIGPROF",  // 27
> > +   "SIGWINCH", // 28
> > +   "SIGIO",// 29 = SIGPOLL = SIGLOST
> > +   "SIGPWR",   // 30
> > +   "SIGSYS",   // 31 = SIGUNUSED
> > +};
> > +
> >  /*
> >   * Trap & Exception support
> >   */
> > @@ -314,10 +349,10 @@ static void show_signal_msg(int signr, struct
> > pt_regs *regs, int code,
> > if (!unhandled_signal(current, signr))
> > return;
> >
> > -   pr_info("%s[%d]: unhandled signal %d at "REG_FMT \
> > -   " nip "REG_FMT" lr "REG_FMT" code %x",
> > -   current->comm, current->pid, signr, addr,
> > -   regs->nip, regs->link, code);
> > +   pr_info("%s[%d]: %s (%d) at "REG_FMT" nip "REG_FMT \
> > +   " lr "REG_FMT" code %x",
> > +   current->comm, current->pid, signames[signr],
> > +   signr, addr, regs->nip, regs->link, code);
>
> Are we sure that signr is always within the limits of the table ?

Looking at the code, we only pass the following signals:

SIGBUS
SIGFPE
SIGILL
SIGSEGV
SIGTRAP

All of them are within the limits of the table.  We've added other
signals for completeness.

Cheers
Murilo



Re: [PATCH 6/7] powerpc/traps: Print signal name for unhandled signals

2018-07-25 Thread Murilo Opsfelder Araujo
Hi, Gustavo.

On Wed, Jul 25, 2018 at 12:19:00PM -0300, Gustavo Romero wrote:
> Hi Murilo,
> 
> LGTM.
> 
> Just a comment:
> 
> On 07/24/2018 04:27 PM, Murilo Opsfelder Araujo wrote:
> > This adds a human-readable name in the unhandled signal message.
> > 
> > Before this patch, a page fault looked like:
> > 
> >  Jul 11 16:04:11 localhost kernel: pandafault[6303]: unhandled signal 
> > 11 at 17d0 nip 161c lr 7fff93c55100 code 2 in 
> > pandafault[1000+1]
> > 
> > After this patch, a page fault looks like:
> > 
> >  Jul 11 18:14:48 localhost kernel: pandafault[6352]: segfault (11) at 
> > 00013a2a09f8 nip 00013a2a086c lr 7fffb63e5100 code 2 in 
> > pandafault[13a2a+1]
> 
> I _really_ don't want to bikeshed here, but I vouch for keeping the
> "unhandled" word before the signal name, like:
> 
> [...] pandafault[6352]: unhandled segfault (11) at 00013a2a09f8 nip [...]
> 
> because the issue reported here is really that we got a segfault _and_
> there was no handler to catch it.

Either way works for me.

> But feel free to wait for additional comments to decide it.

Sure.  I intend to wait a couple of weeks to respin the series based on
community feedback.

Cheers
Murilo



Re: [PATCH 6/7] powerpc/traps: Print signal name for unhandled signals

2018-07-25 Thread LEROY Christophe

Murilo Opsfelder Araujo  a écrit :


This adds a human-readable name in the unhandled signal message.

Before this patch, a page fault looked like:

Jul 11 16:04:11 localhost kernel: pandafault[6303]: unhandled  
signal 11 at 17d0 nip 161c lr  
7fff93c55100 code 2 in pandafault[1000+1]


After this patch, a page fault looks like:

Jul 11 18:14:48 localhost kernel: pandafault[6352]: segfault  
(11) at 00013a2a09f8 nip 00013a2a086c lr 7fffb63e5100  
code 2 in pandafault[13a2a+1]


Signed-off-by: Murilo Opsfelder Araujo 
---
 arch/powerpc/kernel/traps.c | 43 +
 1 file changed, 39 insertions(+), 4 deletions(-)

diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index e6c43ef9fb50..e55ee639d010 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -96,6 +96,41 @@ EXPORT_SYMBOL(__debugger_fault_handler);
 #define TM_DEBUG(x...) do { } while(0)
 #endif

+static const char *signames[SIGRTMIN + 1] = {
+   "UNKNOWN",
+   "SIGHUP", // 1
+   "SIGINT", // 2
+   "SIGQUIT",// 3
+   "SIGILL", // 4
+   "unhandled trap", // 5 = SIGTRAP
+   "SIGABRT",// 6 = SIGIOT
+   "bus error",  // 7 = SIGBUS
+   "floating point exception",   // 8 = SIGFPE
+   "illegal instruction",// 9 = SIGILL
+   "SIGUSR1",// 10
+   "segfault",   // 11 = SIGSEGV
+   "SIGUSR2",// 12
+   "SIGPIPE",// 13
+   "SIGALRM",// 14
+   "SIGTERM",// 15
+   "SIGSTKFLT",  // 16
+   "SIGCHLD",// 17
+   "SIGCONT",// 18
+   "SIGSTOP",// 19
+   "SIGTSTP",// 20
+   "SIGTTIN",// 21
+   "SIGTTOU",// 22
+   "SIGURG", // 23
+   "SIGXCPU",// 24
+   "SIGXFSZ",// 25
+   "SIGVTALRM",  // 26
+   "SIGPROF",// 27
+   "SIGWINCH",   // 28
+   "SIGIO",  // 29 = SIGPOLL = SIGLOST
+   "SIGPWR", // 30
+   "SIGSYS", // 31 = SIGUNUSED
+};
+
 /*
  * Trap & Exception support
  */
@@ -314,10 +349,10 @@ static void show_signal_msg(int signr, struct  
pt_regs *regs, int code,

if (!unhandled_signal(current, signr))
return;

-   pr_info("%s[%d]: unhandled signal %d at "REG_FMT \
-   " nip "REG_FMT" lr "REG_FMT" code %x",
-   current->comm, current->pid, signr, addr,
-   regs->nip, regs->link, code);
+   pr_info("%s[%d]: %s (%d) at "REG_FMT" nip "REG_FMT \
+   " lr "REG_FMT" code %x",
+   current->comm, current->pid, signames[signr],
+   signr, addr, regs->nip, regs->link, code);


Are we sure that signr is always within the limits of the table ?

Christophe


print_vma_addr(KERN_CONT " in ", regs->nip);

--
2.17.1





Re: [PATCH 6/7] powerpc/traps: Print signal name for unhandled signals

2018-07-25 Thread Gustavo Romero

Hi Murilo,

LGTM.

Just a comment:

On 07/24/2018 04:27 PM, Murilo Opsfelder Araujo wrote:

This adds a human-readable name in the unhandled signal message.

Before this patch, a page fault looked like:

 Jul 11 16:04:11 localhost kernel: pandafault[6303]: unhandled signal 11 at 
17d0 nip 161c lr 7fff93c55100 code 2 in 
pandafault[1000+1]

After this patch, a page fault looks like:

 Jul 11 18:14:48 localhost kernel: pandafault[6352]: segfault (11) at 
00013a2a09f8 nip 00013a2a086c lr 7fffb63e5100 code 2 in 
pandafault[13a2a+1]


I _really_ don't want to bikeshed here, but I vouch for keeping the
"unhandled" word before the signal name, like:

[...] pandafault[6352]: unhandled segfault (11) at 00013a2a09f8 nip [...]

because the issue reported here is really that we got a segfault _and_
there was no handler to catch it.

But feel free to wait for additional comments to decide it.


Cheers,
Gustavo