Subject: Re: [PATCH] powerpc: add support for PAGE_SIZEs greater than 4KB for

From: Ilya Yanok <[email-masked]>
Date: Sat, 27 Sep 2008 03:43:52 +0400

Hello Benjamin,

Benjamin Herrenschmidt wrote:
>> [snip]
>>     
>>> diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h
>>> index fce2df9..4f802df 100644
>>> --- a/arch/powerpc/kernel/head_booke.h
>>> +++ b/arch/powerpc/kernel/head_booke.h
>>> @@ -20,7 +20,9 @@
>>>  	beq	1f;							     \
>>>  	mfspr	r1,SPRN_SPRG3;		/* if from user, start at top of   */\
>>>  	lwz	r1,THREAD_INFO-THREAD(r1); /* this thread's kernel stack   */\
>>> -	addi	r1,r1,THREAD_SIZE;					     \
>>> +	lis	r11,THREAD_SIZE@h;					     \
>>> +	ori	r11,r11,THREAD_SIZE@l;					     \
>>> +	add	r1,r1,r11;
>>> \
>>>       
>> It would be nice if we could avoid the extra instruction here when the
>> page sizes isn't big enough to require it.
>>     
>
> As a matter of fact, I don't see why THREAD_SIZE should ever need that,
> there is no reason to change the kernel stack size.
>   

Well, this was introduced because of that:

kernel/fork.c [179]:

 max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);

With THREAD_SIZE=8K we will get mempages divided by zero if PAGE_SIZE is 
bigger than 64K. (Well, another reason not to use >64K pages). Not sure 
this is the right way to fix it.

Regards, Ilya.