diff -urN highmem-ref/arch/i386/config.in highmem/arch/i386/config.in --- highmem-ref/arch/i386/config.in Fri Apr 5 18:09:17 2002 +++ highmem/arch/i386/config.in Fri Apr 5 18:09:44 2002 @@ -436,6 +436,9 @@ bool ' Magic SysRq key' CONFIG_MAGIC_SYSRQ bool ' Spinlock debugging' CONFIG_DEBUG_SPINLOCK bool ' Compile the kernel with frame pointers' CONFIG_FRAME_POINTER + if [ "$CONFIG_HIGHMEM" = "y" ]; then + bool ' Emulate HIGHMEM on lowmem machines' CONFIG_HIGHMEM_EMULATION + fi fi endmenu diff -urN highmem-ref/arch/i386/kernel/setup.c highmem/arch/i386/kernel/setup.c --- highmem-ref/arch/i386/kernel/setup.c Fri Apr 5 18:09:16 2002 +++ highmem/arch/i386/kernel/setup.c Fri Apr 5 18:09:26 2002 @@ -838,7 +838,20 @@ /* * Reserved space for vmalloc and iomap - defined in asm/page.h */ +#ifdef CONFIG_HIGHMEM_EMULATION +#define ORDER_DOWN(x) ((x >> (MAX_ORDER-1)) << (MAX_ORDER-1)) +#define MAXMEM_PFN \ +({ \ + int __max_pfn; \ + if (max_pfn > PFN_DOWN(MAXMEM)) \ + __max_pfn = PFN_DOWN(MAXMEM); \ + else \ + __max_pfn = ORDER_DOWN(max_pfn / 5); \ + __max_pfn; \ +}) +#else #define MAXMEM_PFN PFN_DOWN(MAXMEM) +#endif #define MAX_NONPAE_PFN (1 << 20) /*