Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 161636
b: refs/heads/master
c: 9a0ef29
h: refs/heads/master
v: v3
  • Loading branch information
Tejun Heo committed Jun 24, 2009
1 parent 9bb97b8 commit e04967b
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 28 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9b7dbc7dc0365a943af2d73b1376a6f0aac5dc0d
refs/heads/master: 9a0ef2923abd2cc2c6f78d3663ac7af34c0220e8
3 changes: 0 additions & 3 deletions trunk/arch/s390/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,6 @@ config VIRT_CPU_ACCOUNTING
config ARCH_SUPPORTS_DEBUG_PAGEALLOC
def_bool y

config HAVE_LEGACY_PER_CPU_AREA
def_bool y

mainmenu "Linux Kernel Configuration"

config S390
Expand Down
32 changes: 8 additions & 24 deletions trunk/arch/s390/include/asm/percpu.h
Original file line number Diff line number Diff line change
@@ -1,37 +1,21 @@
#ifndef __ARCH_S390_PERCPU__
#define __ARCH_S390_PERCPU__

#include <linux/compiler.h>
#include <asm/lowcore.h>

/*
* s390 uses its own implementation for per cpu data, the offset of
* the cpu local data area is cached in the cpu's lowcore memory.
* For 64 bit module code s390 forces the use of a GOT slot for the
* address of the per cpu variable. This is needed because the module
* may be more than 4G above the per cpu area.
*/
#if defined(__s390x__) && defined(MODULE)

#define SHIFT_PERCPU_PTR(ptr,offset) (({ \
extern int simple_identifier_##var(void); \
unsigned long *__ptr; \
asm ( "larl %0, %1@GOTENT" \
: "=a" (__ptr) : "X" (ptr) ); \
(typeof(ptr))((*__ptr) + (offset)); }))

#else

#define SHIFT_PERCPU_PTR(ptr, offset) (({ \
extern int simple_identifier_##var(void); \
unsigned long __ptr; \
asm ( "" : "=a" (__ptr) : "0" (ptr) ); \
(typeof(ptr)) (__ptr + (offset)); }))
#define __my_cpu_offset S390_lowcore.percpu_offset

/*
* For 64 bit module code, the module may be more than 4G above the
* per cpu area, use weak definitions to force the compiler to
* generate external references.
*/
#if defined(CONFIG_SMP) && defined(__s390x__) && defined(MODULE)
#define ARCH_NEEDS_WEAK_PER_CPU
#endif

#define __my_cpu_offset S390_lowcore.percpu_offset

#include <asm-generic/percpu.h>

#endif /* __ARCH_S390_PERCPU__ */

0 comments on commit e04967b

Please sign in to comment.