Commit ab6e14b712e2d8e0c4dd3cf1a72083b52104853a
1 parent
18fbef9e52
Exists in
master
and in
7 other branches
ia64: on UP percpu variables are not small memory model
Tony says: | The CONFIG_SMP=n path in ia64 makes quite radical changes ... rather | than putting all the per-cpu stuff into the top 64K of address space | and providing a per-cpu TLB mapping for that range to a different | physical address ... it just makes all the per-cpu stuff link as ordinary | variables in .data. the new generic percpu code got confused about this as PER_CPU_ATTRIBUTES was defined even on UP, so it picked up that small memory model - which was not possible to get linked. The right fix is to only define that on SMP. This resolved the build failures in my cross-compiling environment. also link these variables into the .percpu section even on UP - some assembly code has offset dependencies. (such as GET_IA64_MCA_DATA() in arch/ia64/kernel/mca_asm.S) Signed-off-by: Ingo Molnar <mingo@elte.hu> Acked-by: Tony Luck <tony.luck@intel.com>
Showing 1 changed file with 4 additions and 2 deletions Side-by-side Diff
include/asm-ia64/percpu.h
... | ... | @@ -15,17 +15,19 @@ |
15 | 15 | |
16 | 16 | #include <linux/threads.h> |
17 | 17 | |
18 | +#ifdef CONFIG_SMP | |
19 | + | |
18 | 20 | #ifdef HAVE_MODEL_SMALL_ATTRIBUTE |
19 | 21 | # define PER_CPU_ATTRIBUTES __attribute__((__model__ (__small__))) |
20 | 22 | #endif |
21 | 23 | |
22 | -#ifdef CONFIG_SMP | |
23 | - | |
24 | 24 | #define __my_cpu_offset __ia64_per_cpu_var(local_per_cpu_offset) |
25 | 25 | |
26 | 26 | extern void *per_cpu_init(void); |
27 | 27 | |
28 | 28 | #else /* ! SMP */ |
29 | + | |
30 | +#define PER_CPU_ATTRIBUTES __attribute__((__section__(".data.percpu"))) | |
29 | 31 | |
30 | 32 | #define per_cpu_init() (__phys_per_cpu_start) |
31 | 33 |