|| ||Heiko Carstens <email@example.com> |
|| ||Andrew Morton <firstname.lastname@example.org>,
Ingo Molnar <email@example.com>,
Linus Torvalds <firstname.lastname@example.org>,
David Miller <email@example.com>,
Benjamin Herrenschmidt <be |
|| ||[patch 0/8] Allow inlined spinlocks again V5 |
|| ||Sat, 29 Aug 2009 12:21:15 +0200|
Peter Zijlstra <firstname.lastname@example.org>,
Arnd Bergmann <email@example.com>,
Nick Piggin <firstname.lastname@example.org>,
Martin Schwidefsky <email@example.com>,
Horst Hartmann <firstname.lastname@example.org>,
Christian Ehrhardt <email@example.com>,
Heiko Carstens <firstname.lastname@example.org>|
|| ||Article, Thread
This patch set allows to have inlined spinlocks again.
V2: rewritten from scratch - now also with readable code
V3: removed macro to generate out-of-line spinlock variants since that
would break ctags. As requested by Arnd Bergmann.
V4: allow architectures to specify for each lock/unlock variant if
it should be kept out-of-line or inlined.
V5: simplify ifdefs as pointed out by Linus. Fix architecture compile
breakages caused by this change.
Linus, Ingo, do you still have objections?
The rationale behind this is that function calls on at least s390 are
If one considers that server kernels are usually compiled with
!CONFIG_PREEMPT a simple spin_lock is just a compare and swap loop.
The extra overhead for a function call is significant.
With inlined spinlocks overall cpu usage gets reduced by 1%-5% on s390.
These numbers were taken with some network benchmarks. However I expect
any workload that calls frequently into the kernel and which grabs a few
locks to perform better.
The implementation is straight forward: move the function bodies of the
locking functions to static inline functions and place them in a header
By default all locking code remains out-of-line. An architecture can
in arch/<whatever>/include/asm/spinlock.h to force inlining of a locking
defconfig cross compile tested for alpha, arm, x86, x86_64, ia64, m68k,
m68knommu, mips, powerpc, powerpc64, sparc64, s390, s390x.