From ab6e14b712e2d8e0c4dd3cf1a72083b52104853a Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Wed, 30 Jan 2008 23:27:58 +0100 Subject: [PATCH] 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 Acked-by: Tony Luck --- include/asm-ia64/percpu.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/asm-ia64/percpu.h b/include/asm-ia64/percpu.h index 26404b77f00..77f30b664b4 100644 --- a/include/asm-ia64/percpu.h +++ b/include/asm-ia64/percpu.h @@ -15,18 +15,20 @@ #include +#ifdef CONFIG_SMP + #ifdef HAVE_MODEL_SMALL_ATTRIBUTE # define PER_CPU_ATTRIBUTES __attribute__((__model__ (__small__))) #endif -#ifdef CONFIG_SMP - #define __my_cpu_offset __ia64_per_cpu_var(local_per_cpu_offset) extern void *per_cpu_init(void); #else /* ! SMP */ +#define PER_CPU_ATTRIBUTES __attribute__((__section__(".data.percpu"))) + #define per_cpu_init() (__phys_per_cpu_start) #endif /* SMP */ -- 2.20.1