From: Ingo Molnar <mingo@elte.hu>
To: Miles Lane <miles.lane@gmail.com>
Cc: Andrew Morton <akpm@osdl.org>, LKML <linux-kernel@vger.kernel.org>
Subject: Re: 2.6.17-mm4 + hostap + pcmcia + lockdep -- possible recursive locking detected -- (af_callback_keys + sk->sk_family#3){-.-?}, at: [<c119d8db>] sock_def_readable+0x15/0x69
Date: Sun, 2 Jul 2006 15:29:46 +0200 [thread overview]
Message-ID: <20060702132946.GA25420@elte.hu> (raw)
In-Reply-To: <a44ae5cd0607011804i2326c350ta6262feec1e6805e@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 1819 bytes --]
* Miles Lane <miles.lane@gmail.com> wrote:
> I have patches for hostap, pcmcia and lockdep applied to this kernel.
> These patches are the ones resulting from several recent message
> threads. I just noticed this in my kernel log:
>
> [ INFO: possible recursive locking detected ]
> ---------------------------------------------
ok, lockdep should allow same-class read-lock recursion too, because
it's used by real code and is being relied upon. Could you try the patch
below? (if you have CONFIG_DEBUG_LOCKING_API_SELFTESTS enabled then
apply the other attached patch as well, to fix two testcases.)
Ingo
---------------->
Subject: lockdep: allow read_lock() recursion of same class
From: Ingo Molnar <mingo@elte.hu>
lockdep so far only allowed read-recursion for the same lock
instance. This is enough in the overwhelming majority of cases,
but a hostap case triggered and reported by Miles Lane relies
on same-class different-instance recursion. So we relax the
restriction on read-lock recursion.
(this change does not allow rwsem read-recursion, which is
still forbidden.)
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
kernel/lockdep.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
Index: linux/kernel/lockdep.c
===================================================================
--- linux.orig/kernel/lockdep.c
+++ linux/kernel/lockdep.c
@@ -843,10 +843,9 @@ check_deadlock(struct task_struct *curr,
continue;
/*
* Allow read-after-read recursion of the same
- * lock instance (i.e. read_lock(lock)+read_lock(lock)):
+ * lock class (i.e. read_lock(lock)+read_lock(lock)):
*/
- if ((read == 2) && prev->read &&
- (prev->instance == next_instance))
+ if ((read == 2) && prev->read)
return 2;
return print_deadlock_bug(curr, prev, next);
}
[-- Attachment #2: lockdep-locking-api-self-tests-read-recursion-update.patch --]
[-- Type: text/plain, Size: 1596 bytes --]
Subject: lockdep: locking API self-tests, read-recursion update
From: Ingo Molnar <mingo@elte.hu>
lockdep now allows same type (different instance) rwlock recursion
too, update the testcases accordingly.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
lib/locking-selftest.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
Index: linux/lib/locking-selftest.c
===================================================================
--- linux.orig/lib/locking-selftest.c
+++ linux/lib/locking-selftest.c
@@ -248,7 +248,7 @@ GENERATE_TESTCASE(AA_rsem)
/*
* Special-case for read-locking, they are
- * allowed to recurse on the same lock instance:
+ * allowed to recurse on the same lock class:
*/
static void rlock_AA1(void)
{
@@ -259,7 +259,7 @@ static void rlock_AA1(void)
static void rlock_AA1B(void)
{
RL(X1);
- RL(X2); // this one should fail
+ RL(X2); // this one should NOT fail
}
static void rsem_AA1(void)
@@ -1132,7 +1132,7 @@ void locking_selftest(void)
init_shared_classes();
debug_locks_silent = !debug_locks_verbose;
- DO_TESTCASE_6("A-A deadlock", AA);
+ DO_TESTCASE_6R("A-A deadlock", AA);
DO_TESTCASE_6R("A-B-B-A deadlock", ABBA);
DO_TESTCASE_6R("A-B-B-C-C-A deadlock", ABBCCA);
DO_TESTCASE_6R("A-B-C-A-B-C deadlock", ABCABC);
@@ -1153,7 +1153,7 @@ void locking_selftest(void)
print_testname("recursive read-lock #2");
printk(" |");
- dotest(rlock_AA1B, FAILURE, LOCKTYPE_RWLOCK);
+ dotest(rlock_AA1B, SUCCESS, LOCKTYPE_RWLOCK);
printk(" |");
dotest(rsem_AA1B, FAILURE, LOCKTYPE_RWSEM);
printk("\n");
next prev parent reply other threads:[~2006-07-02 13:34 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-02 1:04 2.6.17-mm4 + hostap + pcmcia + lockdep -- possible recursive locking detected -- (af_callback_keys + sk->sk_family#3){-.-?}, at: [<c119d8db>] sock_def_readable+0x15/0x69 Miles Lane
2006-07-02 13:29 ` Ingo Molnar [this message]
2006-07-02 13:34 ` Ingo Molnar
2006-07-03 6:08 ` Miles Lane
2006-07-03 6:10 ` Ingo Molnar
2006-07-05 7:56 ` Miles Lane
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=20060702132946.GA25420@elte.hu \
--to=mingo@elte.hu \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=miles.lane@gmail.com \
/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