kernel-fxtec-pro1x/arch/x86
Tejun Heo 6b19b0c240 x86, percpu: setup reserved percpu area for x86_64
Impact: fix relocation overflow during module load

x86_64 uses 32bit relocations for symbol access and static percpu
symbols whether in core or modules must be inside 2GB of the percpu
segement base which the dynamic percpu allocator doesn't guarantee.
This patch makes x86_64 reserve PERCPU_MODULE_RESERVE bytes in the
first chunk so that module percpu areas are always allocated from the
first chunk which is always inside the relocatable range.

This problem exists for any percpu allocator but is easily triggered
when using the embedding allocator because the second chunk is located
beyond 2GB on it.

This patch also changes the meaning of PERCPU_DYNAMIC_RESERVE such
that it only indicates the size of the area to reserve for dynamic
allocation as static and dynamic areas can be separate.  New
PERCPU_DYNAMIC_RESERVED is increased by 4k for both 32 and 64bits as
the reserved area separation eats away some allocatable space and
having slightly more headroom (currently between 4 and 8k after
minimal boot sans module area) makes sense for common case
performance.

x86_32 can address anywhere from anywhere and doesn't need reserving.

Mike Galbraith first reported the problem first and bisected it to the
embedding percpu allocator commit.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Mike Galbraith <efault@gmx.de>
Reported-by: Jaswinder Singh Rajput <jaswinder@kernel.org>
2009-03-06 14:33:59 +09:00
..
boot Merge branches 'x86/apic', 'x86/cpu', 'x86/fixmap', 'x86/mm', 'x86/sched', 'x86/setup-lzma', 'x86/signal' and 'x86/urgent' into x86/core 2009-03-04 02:22:31 +01:00
configs Merge branches 'x86/apic', 'x86/defconfig', 'x86/memtest', 'x86/mm' and 'linus' into x86/core 2009-02-26 06:31:32 +01:00
crypto crypto: crc32c-intel - Switch to shash 2008-12-25 11:01:37 +11:00
ia32 x86: ia32_signal: introduce {get|set}_user_seg() 2009-02-22 17:54:47 +01:00
include/asm x86: remove vestigial fix_ioremap prototypes 2009-03-04 02:29:32 +01:00
kernel x86, percpu: setup reserved percpu area for x86_64 2009-03-06 14:33:59 +09:00
kvm KVM: VMX: Flush volatile msrs before emulating rdmsr 2009-02-15 02:47:39 +02:00
lguest x86: remove the Voyager 32-bit subarch 2009-02-23 00:54:01 +01:00
lib x86: use _types.h headers in asm where available 2009-02-13 11:35:01 -08:00
math-emu x86: add %gs accessors for x86_32 2009-02-10 00:41:58 +01:00
mm x86: un-__init fill_pud/pmd/pte 2009-03-04 02:29:36 +01:00
oprofile x86: oprofile: don't set counter width from cpuid on Core2 2009-03-03 12:04:22 +01:00
pci x86, apic: remove genapic.h 2009-02-17 17:52:44 +01:00
power x86: use _types.h headers in asm where available 2009-02-13 11:35:01 -08:00
vdso x86, mm: rename TASK_SIZE64 => TASK_SIZE_MAX 2009-02-21 00:09:44 +01:00
video
xen Merge branch 'x86/core' into core/percpu 2009-03-04 02:29:19 +01:00
Kconfig Merge branch 'x86/core' into core/percpu 2009-03-04 02:29:19 +01:00
Kconfig.cpu Merge branch 'x86/urgent' into core/percpu 2009-02-10 00:41:02 +01:00
Kconfig.debug Merge branch 'linus' into x86/apic 2009-02-22 20:05:19 +01:00
Makefile Merge branch 'core/percpu' into x86/core 2009-02-13 09:45:09 +01:00
Makefile_32.cpu x86: merge winchip-2 and winchip-2a cpu choices 2008-10-13 10:22:48 +02:00