Messages in this thread | | | Date | Fri, 2 Jan 2009 23:13:10 +0100 | From | Ingo Molnar <> | Subject | Re: [PATCH 2/2] futex: correct futex_requeue futex key ref counting in requeue loop |
| |
* Darren Hart <dvhltc@us.ibm.com> wrote:
> Darren Hart wrote: >> The requeue loop takes multiple references to key2, but the corresponding >> put loop decrements the refs for key1. This patch corrects the accounting. >> >> Build and boot tested on an x86_64 system. >> >> Signed-off-by: Darren Hart <dvhltc@us.ibm.com> >> Cc: Peter Zijlstra <peterz@infradead.org> >> Cc: Thomas Gleixner <tglx@linutronix.de> >> Cc: Rusty Russell <rusty@au1.ibm.com> >> --- >> >> kernel/futex.c | 2 +- >> 1 files changed, 1 insertions(+), 1 deletions(-) >> >> diff --git a/kernel/futex.c b/kernel/futex.c >> index cf363ce..3b66d91 100644 >> --- a/kernel/futex.c >> +++ b/kernel/futex.c >> @@ -919,7 +919,7 @@ out_unlock: >> >> /* drop_futex_key_refs() must be called outside the spinlocks. */ >> while (--drop_count >= 0) >> - drop_futex_key_refs(&key1); >> + drop_futex_key_refs(&key2); >> >> put_futex_key(fshared, &key2); >> out_put_key1: >> > > Ugh, so I'm having second thoughts about this patch. I believe what is > happening here is that the requeue loop requeues each waiter from one > futex (key1) to another (key2). It rightly takes a reference to the > futex at key2 and then decrements the references to key1 by drop_count > (since the waiters now reference key2, not key1). The newly taken key2 > references will be dropped in futex_wait() when each waiter is woken up > and takes the futex. > > I apologize for the confusion on this. Thanks for suggesting I send > this patch out independently from the rest Peter ;-) > > If we can come to a consensus on this, I suggest pulling this patch from > tip/core/futexes.
ok, i zapped it. The patches remaining are:
90621c4: futex: catch certain assymetric (get|put)_futex_key calls 42d35d4: futex: make futex_(get|put)_key() calls symmetric
Ingo
| |