On Thu, May 21, 2009 at 03:29:05PM +1000, Greg Ungerer wrote: > Interestingly the definition of MODULE_START is like this: > > #if defined(CONFIG_MODULES) && defined(KBUILD_64BIT_SYM32) && \ > VMALLOC_START != CKSSEG > /* Load modules into 32bit-compatible segment. */ > #define MODULE_START CKSSEG > > > If MODULE_START wasn't defined then the module_alloc() code would > have just called vmalloc() directly - and we wouldn't be in this > mess :-) The reason it's done like this is that if the kernel is in CKSEG0 and modules in CKSEG2 all address references to kernel code and variables are just 32-bit that is they can be referenced with a much shorter instruction sequence than for full blown 64-bit code. This is just one of the artefacts and I think we can just ignore it. Ralf