Subject: Re: Kexec initial registers

From: Michael Ellerman <[email-masked]>
Date: Mon, 17 Jul 2006 11:22:02 +1000

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.

There should be a call to setup_paca(0) in early_setup() _before_ the
first printk/DBG. That patch is pretty new though, so you might not have
it yet.

cheers

-- 
Michael Ellerman
IBM OzLabs

wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)

We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person