Subject: Re: Kexec initial registers

From: Benjamin Herrenschmidt <[email-masked]>
Date: Sun, 16 Jul 2006 11:59:15 -0400

On Sat, 2006-07-15 at 22:10 -0400, Jimi Xenidis wrote:
> On Jul 14, 2006, at 5:08 PM, Benjamin Herrenschmidt wrote:
> 
> > On Fri, 2006-07-14 at 12:02 -0400, Jimi Xenidis wrote:
> >> This is what I have so far:
> >>
> >>    r3: address of device tree blob
> >>    r4: address that kernel was loaded
> >>    r5: not OF (=0)
> >
> > Correct and that's all that should be needed
> >
> >>    r13: local_paca address (0?)
> >
> > You shouldn't have to care about r13 at all, it should be set by the
> > kernel before it's used. If not, please let us know as that means  
> > there
> > is a bug :)
> 
> Not! 99.99% :)
> When loading a kernel under Xen using kexec we set r1-r5 and set all  
> other GPRS to all 5's (cuz we can) with CONFIG_PPC_EARLY_DEBUG=y and  
> all hell breaks loose in the first printk()/DBG() from early_setup()  
> for:
>    kernel/printk.c:506
>    506		spin_lock_irqsave(&logbuf_lock, flags);
> 
> where is access local_paca.
> 
> I think everyone else (ot just the sane ones) just sets all GPRS to 0

Then we have a bug and we need to initialize local_paca before we call
early_setup...

Ben.