oops bringing up secondary cpus

Anton Blanchard anton at samba.org
Fri Jul 16 09:20:08 EST 2004


> > > cpu 0x1: Vector: 300 (Data Access) at [c0000002fff3bd10]
> > >     pc: 000000000000beac
> > >     lr: 000000000000be88
> > >     sp: c0000002fff3bf90
> > >    msr: 8000000000001002
> > >    dar: c0000002fff3bf90
> > >  dsisr: a000000
> > >   current = 0xc0000002fff30920
> > >   paca    = 0xc00000000035a000
> > >     pid   = 0, comm = swapper
> >
> > Looks like you are trying to access a virtual address with IR and DR
> > off (ie you are in real mode).
>
> Thanks for taking a look.  First of all, where are IR and DR represened
> in the register dump?

The msr holds all that info, check out include/asm/processor.h:

#define MSR_IR_LG       5               /* Instruction Relocate */
#define MSR_DR_LG       4               /* Data Relocate */

> Also, does __secondary_start happen in real mode?  It appears to have
> some virtual addresses (of the paca) handed in to it, and it says that
> relocation is off.

Ahh sorry I forgot to tell you about a trick we use. In real mode the
top 2 bits are ignored, so looking at the DAR you are trying to access
0x2fff3bf90.

Now one reason we would take a 300 on a real address is if you tried to
touch memory outside the RMO region. Since the address is above 4GB Im
guessing this is your problem.

Since r1 is the same as the the DAR it sounds like its to do with
current_set being outside the RMO:

        LOADADDR(r3,current_set)
        sldi    r28,r24,3               /* get current_set[cpu#] */
        ldx     r1,r3,r28

etc.

Anton

** Sent via the linuxppc64-dev mail list. See http://lists.linuxppc.org/





More information about the Linuxppc64-dev mailing list