Your change defeats the purpose of the code, which is to allocate a contiguous chunk of memory with physical addresses below 16MB. This is necessary for some ISA DMA devices, as I understand it. It's probably a sufficient workaround in your case, since you probably don't have any devices that actually care.
Perhaps there is a bug in alloc_contig_mem, or perhaps just all the low memory has been allocated to other things first. In the latter case, we may need to move some of the initialization for the driver glue earlier, or do some special hack to reserve the low memory for it. Hmm, maybe I can change the initialization to put the low memory pages last on the free list so they won't be used for anything else before the driver initialization.

