From: Russell Lewis <spamhole-2001-07-16@deming-os.org>
To: "'linux-kernel@vger.kernel.org'" <linux-kernel@vger.kernel.org>
Cc: "'linux-ia64@linuxia64.org'" <linux-ia64@linuxia64.org>
Subject: Re: [Linux-ia64] Linux kernel deadlock caused by spinlock bug
Date: Wed, 31 Jul 2002 10:37:37 -0700 [thread overview]
Message-ID: <3D482061.5010109@deming-os.org> (raw)
In-Reply-To: 200207302248.g6UMmax29450@ishark.jf.intel.com
Sean Griffin wrote:
>
>Mr. Lewis' solution fails to address the scenario of recursively
>taken read locks. Since in that case, the thread taking the lock
>already holds the lock, running some nops doesn't really give
>another thread the possibility of acquiring the write lock. So
>it works out to be the same situation only with a bunch of nops
>executed in the critical path.
>
>
>-Sean Griffin
>
Right. It's not a very good solution, just one of many hacks that might
work :(
What if we kept a value (in per-CPU or per-thread memory) that was a
pointer to the last r/w lock we'd gained? When we release ANY r/w lock,
we could blindly initialize the "lastLock" pointer back to NULL. Then
we have a very quick (i.e. not very good) heuristic for detecting
recursive locks; if the "lastLock" pointer equals the pointer to the
thing you're about to try to lock, then you know that you already hold
it and are about to grab it recursively...otherwise, you fall back to
other routines.
If you really wanted, you could keep multiple pointers per CPU (exact
number tunable by a kernel #define), and on release only clear the one
you are actually releasing. Most builds, I imagine, wouldn't need more
than just a single pointer, though.
next prev parent reply other threads:[~2002-07-31 17:35 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-07-29 21:05 [Linux-ia64] Linux kernel deadlock caused by spinlock bug Van Maren, Kevin
2002-07-29 21:18 ` Matthew Wilcox
2002-07-30 15:58 ` Russell Lewis
2002-07-30 16:56 ` Richard B. Johnson
2002-07-30 17:02 ` Russell Lewis
2002-07-30 17:14 ` Richard B. Johnson
2002-07-30 22:48 ` Sean Griffin
2002-07-31 17:37 ` Russell Lewis [this message]
-- strict thread matches above, loose matches on Subject: below --
2002-07-30 21:15 Van Maren, Kevin
2002-07-30 17:06 Van Maren, Kevin
2002-07-30 17:44 ` William Lee Irwin III
[not found] <3FAD1088D4556046AEC48D80B47B478C0101F3AE@usslc-exch-4.slc.unisys.com.suse.lists.linux.kernel>
2002-07-30 13:32 ` Andi Kleen
2002-07-30 16:27 ` William Lee Irwin III
2002-07-29 21:29 Van Maren, Kevin
2002-07-29 21:48 ` David Mosberger
2002-07-29 20:37 Van Maren, Kevin
2002-07-29 20:46 ` [Linux-ia64] " Matthew Wilcox
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=3D482061.5010109@deming-os.org \
--to=spamhole-2001-07-16@deming-os.org \
--cc=linux-ia64@linuxia64.org \
--cc=linux-kernel@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