UMA MD Small Allocator Runtime Switching
nwhitehorn at freebsd.org
Tue Aug 5 09:42:06 UTC 2008
I'm working on the PowerPC G5 port right now, and have run into a
problem with the way the UMA small allocator works. On G3/G4 systems,
there is a direct physical->virtual mapping, and on G5s there isn't. All
of the infrastructure is in place to support both types of system with a
single kernel image, except that UMA_MD_SMALL_ALLOC must be switched
on/off at runtime.
One solution is to put if (direct_map) use_nonsmall_case() into the MD
small_alloc/free() routines and define UMA_MD_SMALL_ALLOC everywhere.
This works well, except that the MI UMA code then sets booted = 1 too
early in the boot process, before the kmem_alloc*() routines are available.
Basically, I need to find a way have an MD UMA allocator without the MI
UMA code assuming anything about how it works internally. Maybe adding a
UMA_MD_ALLOC_LATE define to prevent setting booted=1 early on?
More information about the freebsd-arch