If someone runs page_address() before page_address_init(), the kernel locks up over uninitialised spinlocks. This only happens with the 4:4 patch, but it is more robust to run page_address_init() before setup_arch(). page_address_init() simply initialises statically allocated storage. --- 25-akpm/init/main.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN init/main.c~earlier-page_address_init init/main.c --- 25/init/main.c~earlier-page_address_init 2004-03-31 22:35:57.323277480 -0800 +++ 25-akpm/init/main.c 2004-03-31 22:35:57.326277024 -0800 @@ -473,6 +473,7 @@ asmlinkage void __init start_kernel(void * enable them */ lock_kernel(); + page_address_init(); printk(linux_banner); setup_arch(&command_line); setup_per_cpu_areas(); @@ -523,7 +524,6 @@ asmlinkage void __init start_kernel(void initrd_start = 0; } #endif - page_address_init(); mem_init(); kmem_cache_init(); if (late_time_init) _