Re: [PATCH] Fix powerpc bad_page_fault output (Re: 2.6.16-rc5-mm1)

Paul E. McKenney
2006-03-02T00:09:05Z

On Wed, Mar 01, 2006 at 10:45:31AM -0600, Olof Johansson wrote:
> On Tue, Feb 28, 2006 at 03:56:24PM -0800, Martin Bligh wrote:
> > Andrew Morton wrote:
> > >ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.16-rc5/2.6.16-rc5-mm1/
> >
> > New panic on IBM power4 lpar of P690. 2.6.16-rc5-git3 is OK.
> >
> > (config:
> > http://ftp.kernel.org/pub/linux/kernel/people/mbligh/config/abat/power4)
> >
> > http://test.kernel.org/24165/debug/console.log
>
> For what it's worth, this is a NULL pointer dereference in the RCU
> code.

And in an area where it is tougher than usual to blame the problem
on a broken use of RCU, as well. ;-)

The "rcp" argument to __rcu_process_callbacks() is C00000076F303F08
and "rdp" is C00000076F303F08, or am I mis-remembering the POWER ABI?

Thanx, Paul

> Seems that the human-readible parts are printed at a differnet printk level
> (well, _at_ a level), so they fell off. Not good.
>
> Andrew and/or Paulus, see patch below.
>
>
> Thanks,
>
> Olof
>
>
> ---
>
> It seems that the die() output is printk'd without any prink level,
> so some distros will log the register dumps and the human readible
> format differently.
>
> (I.e. see http://test.kernel.org/24165/debug/console.log, which lacks
> the KERN_ALERT parts)
>
> Changing the die() output to include a level will likely confuse users
> that currently rely on getting the output where they're getting it,
> so instead remove it from the bad_page_fault() output.
>
> Signed-off-by: Olof Johansson <olof@lixom.net>
>
>
> diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
> index ec4adcb..fee050a 100644
> --- a/arch/powerpc/mm/fault.c
> +++ b/arch/powerpc/mm/fault.c
> @@ -389,7 +389,7 @@ void bad_page_fault(struct pt_regs *regs
>
> /* kernel has accessed a bad area */
>
> - printk(KERN_ALERT "Unable to handle kernel paging request for ");
> + printk("Unable to handle kernel paging request for ");
> switch (regs->trap) {
> case 0x300:
> case 0x380:
> @@ -402,8 +402,7 @@ void bad_page_fault(struct pt_regs *regs
> default:
> printk("unknown fault\n");
> }
> - printk(KERN_ALERT "Faulting instruction address: 0x%08lx\n",
> - regs->nip);
> + printk("Faulting instruction address: 0x%08lx\n", regs->nip);
>
> die("Kernel access of bad area", regs, sig);
> }
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>