We start seeing random kernel hang at fairly late stage of booting when lots of processes are spawned by the init script. The kernel used is a variant of 2.4.21. At the time of the hang, one CPU is stuck in page fault handler with no apparent valid dtlb mapping for the kernel stack. Interesting enough, the task that the stuck CPU is executing has its kernel stack allocated out of 16-32MB physical memory range (we are using 16MB kernel granule in this exercise). We finally tracked it down to be a bug in _start() where IA64_KR(CURRENT_STACK) was incorrectly initialized. This code in head.S is wrong: mov r16=KERNEL_TR_PAGE_NUM ;; // load the "current" pointer (r13) and ar.k6 with the current task mov r13=r2 mov IA64_KR(CURRENT)=r3 // Physical address // initialize k4 to a safe value (64-128MB is mapped by TR_KERNEL) mov IA64_KR(CURRENT_STACK)=r16 r16 is loaded with the kernel page number measured in (1<