Subject: cpu alloc: i386 support Setup a 1 MB area for the cpu areas below the FIXADDR area. Signed-off-by: Christoph Lameter --- arch/x86/Kconfig.i386 | 12 ++++++++++++ arch/x86/mm/init_32.c | 3 +++ include/asm-x86/pgtable_32.h | 7 +++++-- 3 files changed, 20 insertions(+), 2 deletions(-) Index: linux-2.6/arch/x86/Kconfig.i386 =================================================================== --- linux-2.6.orig/arch/x86/Kconfig.i386 2007-11-05 18:08:28.079034180 -0800 +++ linux-2.6/arch/x86/Kconfig.i386 2007-11-05 18:29:13.910284068 -0800 @@ -95,6 +95,18 @@ config DMI bool default y +config CPU_AREA_VIRTUAL + bool + default y + +config CPU_AREA_ORDER + int + default "8" + +config CPU_AREA_ALLOC_ORDER + int + default "0" + source "init/Kconfig" menu "Processor type and features" Index: linux-2.6/arch/x86/mm/init_32.c =================================================================== --- linux-2.6.orig/arch/x86/mm/init_32.c 2007-11-05 18:37:31.298784128 -0800 +++ linux-2.6/arch/x86/mm/init_32.c 2007-11-05 18:39:01.866034090 -0800 @@ -674,6 +674,7 @@ void __init mem_init(void) #if 1 /* double-sanity-check paranoia */ printk("virtual kernel memory layout:\n" " fixmap : 0x%08lx - 0x%08lx (%4ld kB)\n" + " cpu area: 0x%08lx - 0x%08lx (%4ld kb)\n" #ifdef CONFIG_HIGHMEM " pkmap : 0x%08lx - 0x%08lx (%4ld kB)\n" #endif @@ -684,6 +685,8 @@ void __init mem_init(void) " .text : 0x%08lx - 0x%08lx (%4ld kB)\n", FIXADDR_START, FIXADDR_TOP, (FIXADDR_TOP - FIXADDR_START) >> 10, + CPU_AREA_BASE, FIXADDR_START, + (FIXADDR_START - CPU_AREA_BASE) >> 10, #ifdef CONFIG_HIGHMEM PKMAP_BASE, PKMAP_BASE+LAST_PKMAP*PAGE_SIZE, Index: linux-2.6/include/asm-x86/pgtable_32.h =================================================================== --- linux-2.6.orig/include/asm-x86/pgtable_32.h 2007-11-05 18:09:34.555534266 -0800 +++ linux-2.6/include/asm-x86/pgtable_32.h 2007-11-05 18:27:49.819284121 -0800 @@ -79,11 +79,14 @@ void paging_init(void); #define VMALLOC_START (((unsigned long) high_memory + \ 2*VMALLOC_OFFSET-1) & ~(VMALLOC_OFFSET-1)) #ifdef CONFIG_HIGHMEM -# define VMALLOC_END (PKMAP_BASE-2*PAGE_SIZE) +# define CPU_AREA_BASE (PKMAP_BASE - NR_CPUS * \ + (1 << (CONFIG_CPU_AREA_ORDER + PAGE_SHIFT))) #else -# define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE) +# define CPU_AREA_BASE (FIXADDR_START - NR_CPUS * \ + (1 << (CONFIG_CPU_AREA_ORDER + PAGE_SHIFT))) #endif +#define VMALLOC_END (CPU_AREA_BASE - 2 * PAGE_SIZE) /* * _PAGE_PSE set in the page directory entry just means that * the page directory entry points directly to a 4MB-aligned block of