People love to do comparisons with highmem_start_page. However, where CONFIG_HIGHMEM=y and there is no actual highmem, there's no real page at *highmem_start_page. That's usually not a problem, but CONFIG_NONLINEAR is a bit more strict and catches the bogus address tranlations. There are about a gillion different ways to find out of a 'struct page' is highmem or not. Why not just check page_flags? Declare page_is_highmem() and use it wherever there used to be a highmem_start_page comparison. Then, kill off highmem_start_page. memhotplug-dave/arch/i386/mm/discontig.c | 4 ---- memhotplug-dave/arch/i386/mm/highmem.c | 6 +++--- memhotplug-dave/arch/i386/mm/init.c | 1 - memhotplug-dave/arch/i386/mm/pageattr.c | 5 +---- memhotplug-dave/arch/mips/mm/highmem.c | 6 +++--- memhotplug-dave/arch/mips/mm/init.c | 1 - memhotplug-dave/arch/ppc/mm/init.c | 1 - memhotplug-dave/arch/sparc/mm/highmem.c | 2 +- memhotplug-dave/arch/sparc/mm/init.c | 2 -- memhotplug-dave/arch/um/kernel/mem.c | 5 ----- memhotplug-dave/include/asm-ppc/highmem.h | 6 +++--- memhotplug-dave/include/asm-sparc/highmem.h | 4 ++-- memhotplug-dave/include/linux/highmem.h | 12 ++++++++++-- memhotplug-dave/mm/memory.c | 2 -- memhotplug-dave/net/core/dev.c | 2 +- 15 files changed, 24 insertions(+), 35 deletions(-) -- Dave