From: Martin Schwidefsky <schwidefsky@de.ibm.com>
To: Tejun Heo <tj@kernel.org>
Cc: Ingo Molnar <mingo@elte.hu>,
rusty@rustcorp.com.au, tglx@linutronix.de, x86@kernel.org,
linux-kernel@vger.kernel.org, hpa@zytor.com,
Paul Mundt <lethal@linux-sh.org>,
rmk@arm.linux.org.uk, starvik@axis.com, ralf@linux-mips.org,
davem@davemloft.net, cooloney@kernel.org, kyle@mcmartin.ca,
matthew@wil.cx, grundler@parisc-linux.org, takata@linux-m32r.org,
benh@kernel.crashing.org, rth@twiddle.net,
ink@jurassic.park.msu.ru, heiko.carstens@de.ibm.com
Subject: Re: [GIT RFC] percpu: use dynamic percpu allocator as the default percpu allocator
Date: Tue, 31 Mar 2009 18:54:31 +0200 [thread overview]
Message-ID: <20090331185431.72ff1707@skybase> (raw)
In-Reply-To: <49CA32F6.2030408@kernel.org>
On Wed, 25 Mar 2009 22:34:46 +0900
Tejun Heo <tj@kernel.org> wrote:
> Martin Schwidefsky wrote:
> > On Wed, 25 Mar 2009 22:21:03 +0900
> > Tejun Heo <tj@kernel.org> wrote:
> >
> >> Martin Schwidefsky wrote:
> >>>> Martin's original patch should do the trick although it would be
> >>>> slower for static symbols. I'll merge it and post the tree.
> >>> No, my original patch doesn't work. It will break modules that use
> >>> static per-cpu variables.
> >> Oops. Even with the default offset adding macros? Heh... I think it
> >> would be best to wait for your fix then.
> >
> > We could use HAVE_LEGACY_PER_CPU_AREA for the time being.
>
> Eh... The thing is that the patch kills the legacy default allocator.
> We can move it into arch/s390 for the time being but it would be
> simpler if the constant_p thing or something else could work. :-) Do
> you think figuring out how to fix it will take long?
I got the dynamic cpu allocator to work with the patch below. Anybody
with an objection against the SHIFT_PERCPU_VAR macro ?
--
blue skies,
Martin.
"Reality continues to ruin my life." - Calvin.
---
Subject: [PATCH] introduce SHIFT_PERCPU_VAR
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
Introduce SHIFT_PERCPU_VAR to make it possible to use the dynamic
percpu allocator on s390. The background for the new macro is the
addressing limitation on s390 for local variables in an elf object.
Every variable that the compiler considers to be local to an elf object
has to be addressable with an load-address-relative-long (LARL)
instruction, which has a range of +-4GB. A static per-cpu variable is
allocated in the .data.percpu section. If such a variable is defined in
a module the module loader will relocate this section to some place
which will be outside the +-4GB range. So far we used SHIFT_PERCPU_PTR
to add an indirection over the global offset table via a GOTENT
reloction. The GOT for the module is created by the module loader
and is located right next to the module code. That corrects the problem
with the LARL addressability but GOTENT works only for symbols, not for
dynamically allocated per-cpu memory. If the dynamic percpu allocator
is used on s390 the build breaks.
In order to fix this we need to distinguish the dynamically allocated
per-cpu objects from the per-cpu variables. For the former we can
use a simple RELOC_HIDE, for the later we have to use our GOTENT
indirection.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
---
arch/alpha/include/asm/percpu.h | 2 ++
arch/s390/Kconfig | 3 ---
arch/s390/include/asm/percpu.h | 12 ++++++------
include/asm-generic/percpu.h | 10 +++++++---
4 files changed, 15 insertions(+), 12 deletions(-)
diff -urpN linux-next/arch/alpha/include/asm/percpu.h linux-s390/arch/alpha/include/asm/percpu.h
--- linux-next/arch/alpha/include/asm/percpu.h 2009-03-31 15:55:03.000000000 +0200
+++ linux-s390/arch/alpha/include/asm/percpu.h 2009-03-31 15:55:46.000000000 +0200
@@ -47,6 +47,8 @@ extern unsigned long __per_cpu_offset[NR
: "=&r"(__ptr), "=&r"(tmp_gp)); \
(typeof(&per_cpu_var(var)))(__ptr + (offset)); })
+#define SHIFT_PERCPU_VAR(var, offset) SHIFT_PERCPU_PTR(var, offset)
+
#define PER_CPU_ATTRIBUTES __used
#endif /* MODULE */
diff -urpN linux-next/arch/s390/include/asm/percpu.h linux-s390/arch/s390/include/asm/percpu.h
--- linux-next/arch/s390/include/asm/percpu.h 2009-03-31 15:55:03.000000000 +0200
+++ linux-s390/arch/s390/include/asm/percpu.h 2009-03-31 15:55:46.000000000 +0200
@@ -13,19 +13,19 @@
*/
#if defined(__s390x__) && defined(MODULE)
-#define SHIFT_PERCPU_PTR(ptr,offset) (({ \
+#define SHIFT_PERCPU_VAR(ptr,offset) (({ \
extern int simple_identifier_##var(void); \
unsigned long *__ptr; \
- asm ( "larl %0, %1@GOTENT" \
+ 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) ); \
+#define SHIFT_PERCPU_VAR(ptr, offset) (({ \
+ extern int simple_identifier_##var(void); \
+ unsigned long __ptr; \
+ asm ( "" : "=a" (__ptr) : "0" (ptr) ); \
(typeof(ptr)) (__ptr + (offset)); }))
#endif
diff -urpN linux-next/arch/s390/Kconfig linux-s390/arch/s390/Kconfig
--- linux-next/arch/s390/Kconfig 2009-03-31 15:55:10.000000000 +0200
+++ linux-s390/arch/s390/Kconfig 2009-03-31 15:55:36.000000000 +0200
@@ -72,9 +72,6 @@ config PGSTE
config VIRT_CPU_ACCOUNTING
def_bool y
-config HAVE_LEGACY_PER_CPU_AREA
- def_bool y
-
mainmenu "Linux Kernel Configuration"
config S390
diff -urpN linux-next/include/asm-generic/percpu.h linux-s390/include/asm-generic/percpu.h
--- linux-next/include/asm-generic/percpu.h 2009-03-31 15:55:03.000000000 +0200
+++ linux-s390/include/asm-generic/percpu.h 2009-03-31 15:55:46.000000000 +0200
@@ -48,17 +48,21 @@ extern unsigned long __per_cpu_offset[NR
#define SHIFT_PERCPU_PTR(__p, __offset) RELOC_HIDE((__p), (__offset))
#endif
+#ifndef SHIFT_PERCPU_VAR
+#define SHIFT_PERCPU_VAR(__p, __offset) RELOC_HIDE((__p), (__offset))
+#endif
+
/*
* A percpu variable may point to a discarded regions. The following are
* established ways to produce a usable pointer from the percpu variable
* offset.
*/
#define per_cpu(var, cpu) \
- (*SHIFT_PERCPU_PTR(&per_cpu_var(var), per_cpu_offset(cpu)))
+ (*SHIFT_PERCPU_VAR(&per_cpu_var(var), per_cpu_offset(cpu)))
#define __get_cpu_var(var) \
- (*SHIFT_PERCPU_PTR(&per_cpu_var(var), my_cpu_offset))
+ (*SHIFT_PERCPU_VAR(&per_cpu_var(var), my_cpu_offset))
#define __raw_get_cpu_var(var) \
- (*SHIFT_PERCPU_PTR(&per_cpu_var(var), __my_cpu_offset))
+ (*SHIFT_PERCPU_VAR(&per_cpu_var(var), __my_cpu_offset))
#ifdef CONFIG_HAVE_SETUP_PER_CPU_AREA
next prev parent reply other threads:[~2009-03-31 16:55 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-10 7:53 [GIT RFC] percpu: use dynamic percpu allocator as the default percpu allocator Tejun Heo
2009-03-10 7:53 ` [PATCH 1/5] linker script: define __per_cpu_load on all SMP capable archs Tejun Heo
2009-03-10 7:53 ` [PATCH 2/5] percpu: make x86 addr <-> pcpu ptr conversion macros generic Tejun Heo
2009-03-10 7:53 ` [PATCH 3/5] percpu: more flexibility for @dyn_size of pcpu_setup_first_chunk() Tejun Heo
2009-03-10 7:53 ` [PATCH 4/5] percpu: generalize embedding first chunk setup helper Tejun Heo
2009-03-10 7:53 ` [PATCH 5/5] percpu: use dynamic percpu allocator as the default percpu allocator Tejun Heo
2009-03-10 7:57 ` test module to verify " Tejun Heo
2009-03-10 10:59 ` [GIT RFC] percpu: use dynamic percpu allocator as the default " David Miller
2009-03-11 6:03 ` Tejun Heo
2009-03-11 5:56 ` [GIT PULL] pull request for safe part Tejun Heo
2009-03-16 18:01 ` [GIT RFC] percpu: use dynamic percpu allocator as the default percpu allocator Martin Schwidefsky
2009-03-20 2:35 ` Tejun Heo
2009-03-24 15:22 ` Tejun Heo
2009-03-25 11:27 ` Martin Schwidefsky
2009-03-25 11:51 ` Tejun Heo
2009-03-25 12:22 ` Ingo Molnar
2009-03-25 12:27 ` Tejun Heo
2009-03-25 12:39 ` Ingo Molnar
2009-03-25 13:13 ` Martin Schwidefsky
2009-03-25 13:21 ` Tejun Heo
2009-03-25 13:25 ` Martin Schwidefsky
2009-03-25 13:34 ` Tejun Heo
2009-03-31 16:54 ` Martin Schwidefsky [this message]
2009-03-31 17:20 ` Christoph Lameter
2009-03-31 20:18 ` Martin Schwidefsky
2009-03-31 21:10 ` Christoph Lameter
2009-04-01 8:01 ` Martin Schwidefsky
2009-03-31 19:17 ` Ivan Kokshaysky
2009-03-31 20:19 ` Martin Schwidefsky
2009-03-31 20:29 ` Ivan Kokshaysky
2009-04-01 0:07 ` Tejun Heo
2009-04-01 8:10 ` Martin Schwidefsky
2009-04-01 8:17 ` Tejun Heo
2009-04-01 8:32 ` Martin Schwidefsky
2009-04-01 8:37 ` David Miller
2009-04-01 8:47 ` Martin Schwidefsky
2009-04-01 8:50 ` Tejun Heo
2009-04-01 9:08 ` Martin Schwidefsky
2009-04-02 1:54 ` Tejun Heo
2009-04-01 8:53 ` David Miller
2009-04-01 8:53 ` Tejun Heo
2009-04-01 11:07 ` Martin Schwidefsky
2009-04-02 1:57 ` Tejun Heo
2009-04-02 7:24 ` Ivan Kokshaysky
2009-04-02 11:13 ` Martin Schwidefsky
2009-04-03 0:31 ` Tejun Heo
2009-04-07 16:09 ` Ivan Kokshaysky
2009-04-08 20:18 ` Tejun Heo
2009-04-09 9:47 ` Ivan Kokshaysky
2009-04-09 11:53 ` Tejun Heo
2009-04-11 1:38 ` Rusty Russell
2009-04-11 1:52 ` Tejun Heo
2009-04-02 0:20 ` Rusty Russell
2009-03-25 14:00 ` Martin Schwidefsky
2009-03-25 14:14 ` Tejun Heo
2009-03-30 10:07 ` [PATCH UPDATED] " Tejun Heo
2009-03-30 10:42 ` Martin Schwidefsky
2009-04-01 0:08 ` Tejun Heo
2009-03-30 11:49 ` Ingo Molnar
2009-03-30 14:50 ` Christoph Lameter
2009-03-31 16:12 ` Christoph Lameter
2009-04-01 0:15 ` Tejun Heo
2009-04-01 13:49 ` Christoph Lameter
2009-04-01 15:49 ` Ingo Molnar
2009-04-01 18:06 ` Christoph Lameter
2009-04-01 19:01 ` Ingo Molnar
2009-04-01 19:39 ` Linus Torvalds
2009-04-01 20:12 ` Matthew Wilcox
2009-04-02 2:13 ` Ingo Molnar
2009-04-01 22:32 ` Ingo Molnar
2009-04-01 22:57 ` Matthew Wilcox
2009-04-02 2:10 ` Ingo Molnar
2009-04-02 2:21 ` Christoph Lameter
2009-04-02 3:25 ` Ingo Molnar
2009-04-02 3:28 ` Christoph Lameter
2009-04-02 2:30 ` Tejun Heo
2009-04-02 2:18 ` Christoph Lameter
2009-04-02 3:42 ` Ingo Molnar
2009-04-02 13:53 ` Christoph Lameter
2009-04-08 16:26 ` Ingo Molnar
2009-04-13 18:18 ` Christoph Lameter
2009-04-14 14:04 ` Ingo Molnar
2009-04-14 16:48 ` Christoph Lameter
2009-04-14 17:12 ` Ingo Molnar
2009-04-02 2:15 ` Christoph Lameter
2009-04-02 4:19 ` [PATCH 1/2 x86#core/percpu] percpu: don't put the first chunk in reverse-map rbtree Tejun Heo
2009-04-02 4:21 ` [PATCH 2/2 x86#core/percpu] percpu: remove rbtree and use page->index instead Tejun Heo
2009-04-08 17:03 ` [tip:core/percpu] " Christoph Lameter
2009-04-08 17:03 ` [tip:core/percpu] percpu: don't put the first chunk in reverse-map rbtree Tejun Heo
2009-03-31 16:14 ` [PATCH UPDATED] percpu: use dynamic percpu allocator as the default percpu allocator Christoph Lameter
2009-04-01 0:18 ` Tejun Heo
2009-03-31 1:34 ` Rusty Russell
2009-03-31 22:57 ` David Miller
2009-03-31 23:49 ` Benjamin Herrenschmidt
2009-04-01 0:19 ` Tejun Heo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090331185431.72ff1707@skybase \
--to=schwidefsky@de.ibm.com \
--cc=benh@kernel.crashing.org \
--cc=cooloney@kernel.org \
--cc=davem@davemloft.net \
--cc=grundler@parisc-linux.org \
--cc=heiko.carstens@de.ibm.com \
--cc=hpa@zytor.com \
--cc=ink@jurassic.park.msu.ru \
--cc=kyle@mcmartin.ca \
--cc=lethal@linux-sh.org \
--cc=linux-kernel@vger.kernel.org \
--cc=matthew@wil.cx \
--cc=mingo@elte.hu \
--cc=ralf@linux-mips.org \
--cc=rmk@arm.linux.org.uk \
--cc=rth@twiddle.net \
--cc=rusty@rustcorp.com.au \
--cc=starvik@axis.com \
--cc=takata@linux-m32r.org \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox