The patch titled futex_requeue() optimization has been added to the -mm tree. Its filename is futex_requeue-optimization.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this From: Sebastien Dugue <sebastien.dugue@xxxxxxxx> In futex_requeue(), when the 2 futexes keys hash to the same bucket, there is no need to move the futex_q to the end of the bucket list. Signed-off-by: Sebastien Dugue <sebastien.dugue@xxxxxxxx> Cc: Ingo Molnar <mingo@xxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- kernel/futex.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-) diff -puN kernel/futex.c~futex_requeue-optimization kernel/futex.c --- devel/kernel/futex.c~futex_requeue-optimization 2006-05-11 09:11:56.000000000 -0700 +++ devel-akpm/kernel/futex.c 2006-05-11 09:11:56.000000000 -0700 @@ -511,17 +511,20 @@ static int futex_requeue(unsigned long u if (++ret <= nr_wake) { wake_futex(this); } else { - list_move_tail(&this->list, &bh2->chain); - this->lock_ptr = &bh2->lock; + /* + * If key1 and key2 hash to the same bucket, no need to + * requeue. + */ + if (likely(head1 != &hb2->chain)) { + list_move_tail(&this->list, &hb2->chain); + this->lock_ptr = &hb2->lock; + } this->key = key2; get_key_refs(&key2); drop_count++; if (ret - nr_wake >= nr_requeue) break; - /* Make sure to stop if key1 == key2 */ - if (head1 == &bh2->chain && head1 != &next->list) - head1 = &this->list; } } _ Patches currently in -mm which might be from sebastien.dugue@xxxxxxxx are futex_requeue-optimization.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html