From: Linus Torvalds <torvalds@linux-foundation.org>
To: linux-ia64@vger.kernel.org
Subject: Re: [git pull] ia64 changes
Date: Sat, 26 Sep 2009 20:39:12 +0000 [thread overview]
Message-ID: <alpine.LFD.2.01.0909261330000.3303@localhost.localdomain> (raw)
In-Reply-To: <1FE6DD409037234FAB833C420AA843EC0122AEB1@orsmsx424.amr.corp.intel.com>
On Sat, 26 Sep 2009, Luck, Tony wrote:
>
> please pull from:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6.git release
>
> This will update the files shown below.
>
> Tony Luck (1):
> [IA64] implement ticket locks for Itanium
Ok, so x86 has obviously done ticket locks for a while now, and I think
it's good that ia64 does too, but I wonder why you made the ticket lock be
a full 64-bit thing?
A plain 32-bit lock with a 16-bit shift should be plenty good enough, and
those spinlocks are embedded into a lot of structures where size might
matter. In fact, on x86, we do a 16-bit lock with a 8-bit shift for the
case where NR_CPU's is less than 256 (but part of that is that we can use
byte ops easily and access the high byte etc - it's not all about just the
size of the spinlock).
Also, your basic spinlock seems to be pessimised a bit:
+ int *p = (int *)&lock->lock, turn, now_serving;
+
+ now_serving = *p;
+ turn = ia64_fetchadd(1, p+1, acq);
+
+ if (turn = now_serving)
+ return;
+
+ do {
+ cpu_relax();
+ } while (ACCESS_ONCE(*p) != turn);
which has a couple of issues, foremost being the one that you force a
regular read first. Now, if the cacheline is already exclusive in your
local caches, that should be fine, but if it's not in your cache, then
you'll first fetch the cacheline for reading and possibly shared, and then
immediately afterwards you'll do that "fetchadd()" thing that turns it
dirty and exclusive.
It's likely _better_ to do the first access with a dirtying access, which
can bring in the cache-line for exclusive ownership immediately. Of
course, that depends on the exact details of ia64 cache coherency
protocol, but in general, I'd have expected
int *p = ((int *)&lock->lock, turn;
turn = ia64_fetchadd(1, p+1, acq);
while (ACCESS_ONCE(*p) != turn)
cpu_relax();
to actually be not only shorter, but better due to cache access patterns
too (ie do the read only _after_ you've done the write).
But I dunno. I'll pull the thing as-is, but I thought I'd point out that
this looks non-optimal.
Linus
next prev parent reply other threads:[~2009-09-26 20:39 UTC|newest]
Thread overview: 102+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-18 16:34 [git pull] ia64 changes Luck, Tony
2008-04-22 23:36 ` Luck, Tony
2008-04-24 23:51 ` Luck, Tony
2008-04-25 0:16 ` Adrian Bunk
2008-04-25 0:25 ` Luck, Tony
2008-04-25 0:41 ` [2.6 patch] ia64: let NUMA select SMP Adrian Bunk
2008-04-25 1:01 ` Luck, Tony
2008-04-25 12:50 ` Mike Travis
2008-04-29 23:36 ` [git pull] ia64 changes Luck, Tony
2008-05-01 22:57 ` Luck, Tony
2008-05-15 20:46 ` Luck, Tony
2008-05-28 19:52 ` Luck, Tony
2008-06-16 17:28 ` Luck, Tony
2008-06-24 21:49 ` Luck, Tony
2008-06-30 23:52 ` Luck, Tony
2008-07-17 20:31 ` Luck, Tony
2008-07-25 20:30 ` Luck, Tony
2008-08-06 18:32 ` Luck, Tony
2008-08-12 21:55 ` Luck, Tony
2008-08-18 23:46 ` Luck, Tony
2008-08-26 16:59 ` Luck, Tony
2008-09-10 21:17 ` Luck, Tony
2008-09-23 16:59 ` Luck, Tony
2008-09-30 16:18 ` Luck, Tony
2008-10-21 18:01 ` Luck, Tony
2008-11-05 0:43 ` Luck, Tony
2008-11-07 18:00 ` Luck, Tony
2008-11-20 22:47 ` Luck, Tony
2008-12-09 22:28 ` Luck, Tony
2009-01-15 19:45 ` Luck, Tony
2009-02-19 21:02 ` Luck, Tony
2009-02-25 22:44 ` Luck, Tony
2009-03-06 22:17 ` Luck, Tony
2009-03-27 17:46 ` Luck, Tony
2009-04-01 20:20 ` Luck, Tony
2009-04-08 22:33 ` Luck, Tony
2009-04-20 17:32 ` Luck, Tony
2009-05-05 22:42 ` Luck, Tony
2009-06-15 17:20 ` Luck, Tony
2009-07-17 18:11 ` Fenghua Yu
2009-08-11 23:40 ` Fenghua Yu
2009-09-02 17:28 ` Luck, Tony
2009-09-17 17:11 ` Luck, Tony
2009-09-26 19:57 ` Luck, Tony
2009-09-26 20:39 ` Linus Torvalds [this message]
2009-09-26 23:16 ` Matthew Wilcox
2009-09-27 0:00 ` Linus Torvalds
2009-09-27 0:08 ` Linus Torvalds
2009-09-27 4:54 ` Luck, Tony
2009-09-27 5:18 ` Linus Torvalds
2009-09-27 5:20 ` Luck, Tony
2009-09-28 19:02 ` Boehm, Hans
2009-09-28 22:35 ` Luck, Tony
2009-09-28 22:54 ` Linus Torvalds
2009-09-28 23:01 ` Linus Torvalds
2009-09-28 23:01 ` Luck, Tony
2009-09-29 0:03 ` Rick Jones
2009-09-29 0:14 ` Linus Torvalds
2009-09-29 17:53 ` Luck, Tony
2009-09-29 18:07 ` Linus Torvalds
2009-09-30 0:54 ` Robin Holt
2009-09-30 1:24 ` Linus Torvalds
2009-09-30 1:30 ` Linus Torvalds
2009-09-30 2:46 ` Robin Holt
2009-09-30 2:56 ` Linus Torvalds
2009-09-30 18:00 ` Rick Jones
2009-11-02 18:07 ` Luck, Tony
2009-12-15 22:33 ` Luck, Tony
2010-01-08 17:20 ` Luck, Tony
2010-01-08 17:35 ` Linus Torvalds
2010-01-08 17:49 ` Luck, Tony
2010-01-08 19:24 ` Luck, Tony
2010-02-16 19:43 ` Luck, Tony
2010-02-24 17:32 ` Luck, Tony
2010-03-01 18:11 ` Luck, Tony
2010-05-18 17:11 ` Luck, Tony
2010-05-18 20:43 ` Robin Holt
2010-05-18 22:04 ` Luck, Tony
2010-07-01 15:22 ` Luck, Tony
2010-08-04 16:09 ` Luck, Tony
2010-08-14 4:04 ` Luck, Tony
2010-08-18 20:06 ` Luck, Tony
2010-09-13 18:33 ` Luck, Tony
2010-09-14 6:06 ` Petr Tesarik
2010-09-14 7:02 ` Petr Tesarik
2010-09-14 17:37 ` Luck, Tony
2010-09-14 20:38 ` Petr Tesarik
2010-09-14 20:57 ` Tony Luck
2010-09-16 15:57 ` Luck, Tony
2010-10-21 16:00 ` Luck, Tony
2010-10-21 21:33 ` Linus Torvalds
2011-01-10 18:01 ` Luck, Tony
2011-01-13 18:08 ` Luck, Tony
2011-01-13 23:10 ` Luck, Tony
2011-01-14 19:33 ` Luck, Tony
2011-03-24 16:29 ` Luck, Tony
2011-03-30 19:09 ` Luck, Tony
2011-05-31 20:20 ` Luck, Tony
2011-08-01 16:57 ` Luck, Tony
2011-11-02 21:06 ` Luck, Tony
2012-01-05 17:42 ` Luck, Tony
2012-03-23 17:23 ` [GIT PULL] " Luck, Tony
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=alpine.LFD.2.01.0909261330000.3303@localhost.localdomain \
--to=torvalds@linux-foundation.org \
--cc=linux-ia64@vger.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