Skip to content

Commit

Permalink
ia64: on UP percpu variables are not small memory model
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ingo Molnar committed Jan 30, 2008
1 parent 18fbef9 commit ab6e14b
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions include/asm-ia64/percpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,20 @@

#include <linux/threads.h>

#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 */
Expand Down

0 comments on commit ab6e14b

Please sign in to comment.