Do you perhaps have a kernel compiled without CONFIG_HIGHPTE? Normally
__pte_alloc should be able to allocate highmem unless that option is
not set. Before HIGHPTE was implemented running out of low memory
due to page tables was pretty common.
BTW the ultimate fix for most lowmem problems is to go 64bit
-Andi
--