[PATCH 3/3] zImage: Cleanup and improve zImage entry point

Geoff Levand geoffrey.levand at am.sony.com
Tue Feb 20 02:14:08 EST 2007


David Gibson wrote:
> On Sat, Feb 17, 2007 at 05:22:24PM -0800, Geoff Levand wrote:
>> David Gibson wrote:
>> > Index: working-2.6/arch/powerpc/boot/crt0.S
>> > @@ -59,6 +60,29 @@ _zimage_start:
>> >  	sync
>> >  	isync
>> >  
>> > -	mr	r6,r1
>> > -	b	start
>> > +	/* Possibly set up a custom stack */
>> > +.weak	_platform_stack_top
>> > +	lis	r8,_platform_stack_top at ha
>> > +	addi	r8,r8,_platform_stack_top at l
>> > +	cmpwi	r8,0
>> > +	beq	5f
>> > +	lwz	r1,0(r8)
>> 
>> > +5:
>> > +
>> > +	/* Clear the BSS */
>> > +	lis	r9,__bss_start at ha
>> > +	addi	r9,r9,__bss_start at l
>> > +	lis	r8,_end at ha
>> > +	addi	r8,r8,_end at l
>> > +	li	r0,0
>> > +6:	stw	r0,0(r9)
>> > +	addi	r9,r9,4
>> > +	cmplw	cr0,r9,r8
>> > +	blt	6b
>> 
>> 
>> This messed me up a bit since I had two stacks in the bss, one for each
>> processor thread.  By the time this was called on the primary thread the
>> secondary thread could already be using its stack.  I changed the secondary
>> thread to use a small stack in the data section, so this seems OK.
> 
> Hrm... if you're entering with multiple threads and stacks, you're
> probably a prime candidate for providing your own zimage_start,
> instead of using this code.

I think the better idea is to make the generic bootwrapper code support
SMP.  I don't see any fundamental reason why it can't.  The trouble here
is that your BSS stack is really not a proper way, that's why it doesn't
work.

I'll put something together that provides generic (SMP) stack support
for the bootwrapper.  I'll  be away the end of this week and next week,
so I don't know when I'll be able to post it.

-Geoff





More information about the Linuxppc-dev mailing list