Subject: Re: uvm_km_valloc_align() and USPACE (Re: CVS commit: syssrc)
To: None <thorpej@zembu.com>
From: Noriyuki Soda <soda@sra.co.jp>
List: tech-kern
Date: 11/29/2000 18:56:25
> On Wed, Nov 29, 2000 at 12:21:43AM +0900, Izumi Tsutsui wrote:
> > This means that UPAGES must be the power of two?
> > On some m68k port, UPAGES is 3 so uvm_map_findspace() fails
> > on KASSERT((align & (align - 1)) == 0).
> >
> > (I guess UPAGES on such ports could be changed to 2 from 3, though.)
>>>>> On Tue, 28 Nov 2000 08:05:31 -0800,
Jason R Thorpe <thorpej@zembu.com> said:
> Yah, it should just be 2 ... wonder why some of them are using 3 pages?!
Mmmm, really?
As far as I know, the size of UPAGES depends on the following things:
- stack usage of kernel upper half
- stack usage of kernel lower half
this depends on maximum allowed nesting level of interrupt handler,
i.e. depends on the number of interrupt priority level
- stack usage of the architecture
- page size
If a architecture requires more stack to call a function, the
architecture might require larger value of UPAGES.
Or, if a architecture uses smaller size for PAGE_SIZE, the
architecture might require larger value of UPAGES.
Is there any reason that UPAGES should be 2?
For me, adding a symbol like USPACE_ALIGNMENT and use the symbol
for uvm_km_valloc_align seems to be the right thing.
The USPACE_ALIGNMENT on mips should be USPACE,
and the value on other architectures should be NBPG.
--
soda