On Fri, 2005-01-07 at 10:48 -0800, Mark Wong wrote: > I gave this set of patches a try and got the following booting, I'll > attached my .config: > > ------------[ cut here ]------------ > kernel BUG at include/linux/nonlinear.h:99! This is usually caused by something doing __pa() or phys_to_virt() of "highmem". There is no valid address there, and nonlinear.h catches that, by design. You need to feed it a valid address instead. What I do most of the time is something like this: - if (foo < __pa(high_memory)) + if (foo <= __pa(high_memory-1)) I don't know exactly what the problem is because the debugging messages that I added for nonlinear are chopped off. I know the bug text says to "cut here", but the messages above that are actually much more important than the bug text itself. Please try to include some dmesg context in all bug reports, especially with development code. There's debugging gold in those extra lines. static inline unsigned long __pa(const void *ptr_addr) { unsigned long addr = (unsigned long)ptr_addr; unsigned long section = addr_to_section(__boot_pa(addr)); if(mem_section[section].phys_section == INVALID_SECTION) { printk("%s(%p):\n", __func__, ptr_addr); printk("\tmem_section[%ld]: INVALID\n", section); BUG(); } return section_to_addr(mem_section[section].phys_section) | section_offset(addr); } -- Dave