From: Ingo Molnar <mingo@elte.hu>
To: Arjan van de Ven <arjan@infradead.org>
Cc: Andrew Morton <akpm@osdl.org>, Eric Dumazet <dada1@cosmosbay.com>,
torvalds@osdl.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] i386 spinlocks should use the full 32 bits, not only 8 bits
Date: Thu, 20 Oct 2005 23:50:47 +0200 [thread overview]
Message-ID: <20051020215047.GA24178@elte.hu> (raw)
In-Reply-To: <1129533603.2907.12.camel@laptopd505.fenrus.org>
* Arjan van de Ven <arjan@infradead.org> wrote:
> > Is that intentional though? With <randon .config> my mm/swapfile.i has an
> > unreferenced
> >
> > static inline void __raw_spin_unlock(raw_spinlock_t *lock)
> > {
> > __asm__ __volatile__(
> > "movb $1,%0" :"=m" (lock->slock) : : "memory"
> > );
> > }
> >
> > which either a) shouldn't be there or b) should be referenced.
> >
> > Ingo, can you confirm that x86's spin_unlock is never inlined? If so,
> > what's my __raw_spin_unlock() doing there?
__raw_spin_unlock is currently only inlined in the kernel/spinlock.c
code.
> I would really want this one inlined! A movb is a much shorter code
> sequence than a call (esp if you factor in argument setup).
> De-inlining to save space is nice and all, but it can go too far....
yeah, it makes sense to inline the single-instruction unlock operations:
nondebug spin_unlock(), read_unlock() and write_unlock(). This gives a
0.2% code-size reduction:
text data bss dec hex filename
4072031 858208 387196 5317435 51233b vmlinux-smp-uninlined
4060671 858212 387196 5306079 50f6df vmlinux-smp-inlined
patch against -rc5. Boot-tested on a 4-way x86 SMP box.
Ingo
Signed-off-by: Ingo Molnar <mingo@elte.hu>
include/linux/spinlock.h | 15 ++++++++++++---
1 files changed, 12 insertions(+), 3 deletions(-)
Index: linux/include/linux/spinlock.h
===================================================================
--- linux.orig/include/linux/spinlock.h
+++ linux/include/linux/spinlock.h
@@ -171,9 +171,18 @@ extern int __lockfunc generic__raw_read_
#define write_lock_irq(lock) _write_lock_irq(lock)
#define write_lock_bh(lock) _write_lock_bh(lock)
-#define spin_unlock(lock) _spin_unlock(lock)
-#define write_unlock(lock) _write_unlock(lock)
-#define read_unlock(lock) _read_unlock(lock)
+/*
+ * We inline the unlock functions in the nondebug case:
+ */
+#ifdef CONFIG_DEBUG_SPINLOCK
+# define spin_unlock(lock) _spin_unlock(lock)
+# define read_unlock(lock) _read_unlock(lock)
+# define write_unlock(lock) _write_unlock(lock)
+#else
+# define spin_unlock(lock) __raw_spin_unlock(&(lock)->raw_lock)
+# define read_unlock(lock) __raw_read_unlock(&(lock)->raw_lock)
+# define write_unlock(lock) __raw_write_unlock(&(lock)->raw_lock)
+#endif
#define spin_unlock_irqrestore(lock, flags) \
_spin_unlock_irqrestore(lock, flags)
next prev parent reply other threads:[~2005-10-20 21:50 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-10-11 4:04 i386 spinlock fairness: bizarre test results Chuck Ebbert
2005-10-11 9:42 ` Eric Dumazet
2005-10-11 13:00 ` Alan Cox
2005-10-11 14:44 ` Linus Torvalds
2005-10-11 15:32 ` [PATCH] i386 spinlocks should use the full 32 bits, not only 8 bits Eric Dumazet
2005-10-11 16:03 ` Linus Torvalds
2005-10-11 16:36 ` Eric Dumazet
2005-10-11 16:54 ` Linus Torvalds
2005-10-11 16:55 ` Linus Torvalds
2005-10-17 7:03 ` Andrew Morton
2005-10-17 7:20 ` Arjan van de Ven
2005-10-20 21:50 ` Ingo Molnar [this message]
2005-10-20 21:57 ` Linus Torvalds
2005-10-20 22:02 ` Ingo Molnar
2005-10-20 22:15 ` Linus Torvalds
2005-10-20 22:27 ` Ingo Molnar
2005-10-20 22:44 ` Andrew Morton
2005-10-20 22:53 ` Ingo Molnar
2005-10-20 23:01 ` Andrew Morton
2005-10-20 23:26 ` Ingo Molnar
2005-10-27 16:54 ` Paul Jackson
2005-10-11 17:59 ` Andi Kleen
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=20051020215047.GA24178@elte.hu \
--to=mingo@elte.hu \
--cc=akpm@osdl.org \
--cc=arjan@infradead.org \
--cc=dada1@cosmosbay.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@osdl.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.