oops bringing up secondary cpus

Dave Hansen haveblue at us.ibm.com
Fri Jul 16 09:33:44 EST 2004


On Thu, 2004-07-15 at 16:20, Anton Blanchard wrote:
> 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.

Aha!  That really clears it up.

> 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

OK, but current_set is the task info for the idle process for the new
CPU, right?  It looks to me like it's allocated like any old task using
copy_process() in smp_create_idle().  This should use kmalloc() like any
other task, and that's certainly not guaranteed to be in the RMO.  Did
this change recently?  Do we need to lmb_alloc() the idle task struct
for the secondary CPUs?

-- Dave


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





More information about the Linuxppc64-dev mailing list