diff -NurpP --minimal linux-2.6.19.7-vs2.2.0-rc18.1/include/linux/percpu.h linux-2.6.19.7-vs2.2.0-rc18.2/include/linux/percpu.h --- linux-2.6.19.7-vs2.2.0-rc18.1/include/linux/percpu.h 2006-11-08 04:57:40 +0100 +++ linux-2.6.19.7-vs2.2.0-rc18.2/include/linux/percpu.h 2007-03-19 04:00:11 +0100 @@ -11,7 +11,7 @@ /* Enough to cover all DEFINE_PER_CPUs in kernel, including modules. */ #ifndef PERCPU_ENOUGH_ROOM -#define PERCPU_ENOUGH_ROOM 65536 +#define PERCPU_ENOUGH_ROOM 32768 #endif /* diff -NurpP --minimal linux-2.6.19.7-vs2.2.0-rc18.1/include/linux/vserver/percpu.h linux-2.6.19.7-vs2.2.0-rc18.2/include/linux/vserver/percpu.h --- linux-2.6.19.7-vs2.2.0-rc18.1/include/linux/vserver/percpu.h 1970-01-01 01:00:00 +0100 +++ linux-2.6.19.7-vs2.2.0-rc18.2/include/linux/vserver/percpu.h 2007-03-19 04:01:21 +0100 @@ -0,0 +1,14 @@ +#ifndef _VX_PERCPU_H +#define _VX_PERCPU_H + +#include "cvirt_def.h" +#include "sched_def.h" + +struct _vx_percpu { + struct _vx_cvirt_pc cvirt; + struct _vx_sched_pc sched; +}; + +#define PERCPU_PERCTX (sizeof(struct _vx_percpu)) + +#endif /* _VX_PERCPU_H */ diff -NurpP --minimal linux-2.6.19.7-vs2.2.0-rc18.1/init/main.c linux-2.6.19.7-vs2.2.0-rc18.2/init/main.c --- linux-2.6.19.7-vs2.2.0-rc18.1/init/main.c 2007-03-13 18:22:57 +0100 +++ linux-2.6.19.7-vs2.2.0-rc18.2/init/main.c 2007-03-19 04:00:33 +0100 @@ -49,6 +49,7 @@ #include #include #include +#include #include #include @@ -354,7 +355,7 @@ EXPORT_SYMBOL(__per_cpu_offset); static void __init setup_per_cpu_areas(void) { - unsigned long size, i; + unsigned long size, vspc, i; char *ptr; unsigned long nr_possible_cpus = num_possible_cpus(); @@ -364,6 +365,8 @@ static void __init setup_per_cpu_areas(v if (size < PERCPU_ENOUGH_ROOM) size = PERCPU_ENOUGH_ROOM; #endif + vspc = PERCPU_PERCTX * CONFIG_VSERVER_CONTEXTS; + size = ALIGN(size + vspc, SMP_CACHE_BYTES); ptr = alloc_bootmem(size * nr_possible_cpus); for_each_possible_cpu(i) { diff -NurpP --minimal linux-2.6.19.7-vs2.2.0-rc18.1/kernel/vserver/Kconfig linux-2.6.19.7-vs2.2.0-rc18.2/kernel/vserver/Kconfig --- linux-2.6.19.7-vs2.2.0-rc18.1/kernel/vserver/Kconfig 2007-03-09 16:28:40 +0100 +++ linux-2.6.19.7-vs2.2.0-rc18.2/kernel/vserver/Kconfig 2007-03-19 03:54:01 +0100 @@ -186,6 +186,18 @@ config VSERVER_PRIVACY access to structures assigned to a specific context, like ptys or loop devices. +config VSERVER_CONTEXTS + int "Maximum number of Contexts (1-65533)" if EMBEDDED + range 1 65533 + default "768" if 64BIT + default "256" + help + This setting will optimize certain data structures + and memory allocations according to the expected + maximum. + + note: this is not a strict upper limit. + config VSERVER_WARN bool "VServer Warnings" default y