From 9a2cd7194df99b98914ed7ccd0f0943e48e3a1d1 Mon Sep 17 00:00:00 2001 From: Christoph Lameter Date: Tue, 6 Nov 2007 11:33:50 -0800 Subject: [PATCH] cpu alloc: i386 support Setup a 256 kB area for the cpu areas below the FIXADDR area. The use of the cpu alloc area is pretty minimal on i386. An 8p system with no extras uses only ~8kb. So 256kb should be plenty. A configuration that supports up to 8 processors takes up 2MB of the scarce virtual address space. 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(-) diff --git a/arch/x86/Kconfig.i386 b/arch/x86/Kconfig.i386 index 871e564..b57c42f 100644 --- a/arch/x86/Kconfig.i386 +++ b/arch/x86/Kconfig.i386 @@ -95,6 +95,18 @@ config DMI bool default y +config CPU_AREA_VIRTUAL + bool + default y + +config CPU_AREA_ORDER + int + default "6" + +config CPU_AREA_ALLOC_ORDER + int + default "0" + source "init/Kconfig" menu "Processor type and features" diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c index c7d1947..39c2571 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c @@ -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, diff --git a/include/asm-x86/pgtable_32.h b/include/asm-x86/pgtable_32.h index ed3e70d..d0774a5 100644 --- a/include/asm-x86/pgtable_32.h +++ b/include/asm-x86/pgtable_32.h @@ -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 -- 1.5.3.4