From: David Singleton <dsingleton@mvista.com>
To: Esben Nielsen <simlo@phys.au.dk>
Cc: dino@in.ibm.com, robustmutexes@lists.osdl.org,
linux-kernel@vger.kernel.org, Ingo Molnar <mingo@elte.hu>
Subject: Re: robust futex deadlock detection patch
Date: Mon, 09 Jan 2006 12:01:35 -0800 [thread overview]
Message-ID: <43C2C11F.4010408@mvista.com> (raw)
In-Reply-To: <Pine.LNX.4.44L0.0601071105540.17859-100000@lifa03.phys.au.dk>
Esben Nielsen wrote:
>
>I am a little bit confused when I read check_futex_deadlock():
>It takes a parameter struct thread_info *ti and immediately do
>struct task_struct *task = ti->task. Now we have the usual pair
>(thread_info *ti, task_t *task) corresponding to the same process. Later
>on in the function you do ti = lock_owner(lock), but do not update task.
>Was this intented?
>
>
Whoops. You are right. I've fixed the update to the task structure.
The check_futex_deadlock()
code now mirrors the existing check_deadlock() code.
>Anyway, I can't see that you have locked the necesary raw_spin_locks.
>Forinstance lock_owner(lock) must be called with the lock->wait_lock taken
>and task->blocked_on needs task->pi_lock locked.
>
>
Actually those locks are grabbed in the down_try_futex code. I hold
both of those
locks across the check for deadlocks and into __down_interruptible.
Those locks
need to be held for the check for deadlocks and holding
them from down_try_futex to down_interruptible garuantees that a thread
that enters the kernel to block on a lock will block on the lock. There
is no
window any more between dropping the robust_sem and mmap_sem
and calling down_interruptible.
This also fixed an SMP problem that Dave Carlson has been seeing on earlier
patches.
The new patch is at
http://source.mvista.com/~dsingleton/patch-2.6.15-rt2-rf2
David
>To avoid deadlocks in all the deadlock detection you have to do the loop
>something like
>
>for(owner = current; owner; ) {
> raw_spin_lock(&owner->pi_lock);
> if(owner->task->blocked_on) {
> lock = owner->task->blocked_on->lock;
> raw_spin_lock(&lock->wait_lock);
> owner2 = lock_owner(lock);
> if(owner2) {
> get_task_struct(owner2->task);
> raw_spin_unlock(&lock->wait_lock)
> raw_spin_unlock(&owner->pi_lock);
> }
> put_task_struct(owner->task);
> owner = owner2;
> if(owner2==current) DEADLOCK
>}
>
>
>Esben
>
>
>
>
>>David
>>
>>-
>>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>the body of a message to majordomo@vger.kernel.org
>>More majordomo info at http://vger.kernel.org/majordomo-info.html
>>Please read the FAQ at http://www.tux.org/lkml/
>>
>>
>>
>
>
>
>
>
next prev parent reply other threads:[~2006-01-09 20:00 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-12-14 22:39 Recursion bug in -rt Dinakar Guniguntala
2005-12-15 1:03 ` david singleton
2005-12-15 19:44 ` Dinakar Guniguntala
2005-12-15 20:40 ` David Singleton
2005-12-16 0:02 ` david singleton
2005-12-16 18:42 ` Dinakar Guniguntala
2005-12-16 21:26 ` David Singleton
2005-12-19 11:56 ` Dinakar Guniguntala
2005-12-19 20:11 ` David Singleton
2005-12-15 19:00 ` David Singleton
2005-12-15 19:52 ` Dinakar Guniguntala
2005-12-20 13:19 ` Ingo Molnar
2005-12-20 15:50 ` Dinakar Guniguntala
2005-12-20 17:43 ` Esben Nielsen
2005-12-20 19:33 ` Steven Rostedt
2005-12-20 20:42 ` Esben Nielsen
2005-12-20 21:20 ` Steven Rostedt
2005-12-20 21:55 ` david singleton
2005-12-20 22:56 ` Esben Nielsen
2005-12-20 23:12 ` Steven Rostedt
2005-12-20 23:55 ` Esben Nielsen
2005-12-22 4:37 ` david singleton
2005-12-20 22:43 ` Esben Nielsen
2005-12-20 22:59 ` Steven Rostedt
2006-01-03 1:54 ` david singleton
2006-01-05 2:14 ` david singleton
2006-01-05 9:43 ` Esben Nielsen
2006-01-05 17:11 ` david singleton
2006-01-05 17:47 ` Esben Nielsen
2006-01-05 18:26 ` david singleton
2006-01-07 2:40 ` robust futex deadlock detection patch david singleton
[not found] ` <a36005b50601071145y7e2ead9an4a4ca7896f35a85e@mail.gmail.com>
2006-01-07 19:49 ` Ulrich Drepper
2006-01-09 9:23 ` Esben Nielsen
2006-01-09 20:01 ` David Singleton [this message]
2006-01-09 20:16 ` Esben Nielsen
2006-01-09 21:08 ` Steven Rostedt
2006-01-09 21:19 ` Esben Nielsen
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=43C2C11F.4010408@mvista.com \
--to=dsingleton@mvista.com \
--cc=dino@in.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=robustmutexes@lists.osdl.org \
--cc=simlo@phys.au.dk \
/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.