diff -urN highmem-debug-ref/arch/i386/config.in highmem-debug/arch/i386/config.in --- highmem-debug-ref/arch/i386/config.in Tue Oct 23 12:56:05 2001 +++ highmem-debug/arch/i386/config.in Tue Oct 23 12:57:17 2001 @@ -407,6 +407,9 @@ bool ' Spinlock debugging' CONFIG_DEBUG_SPINLOCK bool ' Verbose BUG() reporting (adds 70K)' CONFIG_DEBUG_BUGVERBOSE bool ' Debug allocation faliures' CONFIG_DEBUG_GFP + if [ "$CONFIG_HIGHMEM" = "y" ]; then + bool ' Emulate HIGHMEM on lowmem machines' CONFIG_HIGHMEM_EMULATION + fi fi endmenu diff -urN highmem-debug-ref/arch/i386/kernel/setup.c highmem-debug/arch/i386/kernel/setup.c --- highmem-debug-ref/arch/i386/kernel/setup.c Sun Oct 21 20:03:33 2001 +++ highmem-debug/arch/i386/kernel/setup.c Tue Oct 23 12:57:35 2001 @@ -821,7 +821,20 @@ */ #define VMALLOC_RESERVE (unsigned long)(128 << 20) #define MAXMEM (unsigned long)(-PAGE_OFFSET-VMALLOC_RESERVE) +#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) /*