Messages in this thread Patch in this message | | | Date | Wed, 10 May 2006 11:27:01 +0200 | From | Sébastien Dugué <> | Subject | [RFC][PATCH RT 1/2] futex_requeue-optimize |
| |
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.
futex.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-)
Signed-off-by: Sébastien Dugué <sebastien.dugue@bull.net>
Index: linux-2.6.16-rt20/kernel/futex.c =================================================================== --- linux-2.6.16-rt20.orig/kernel/futex.c 2006-05-04 10:58:38.000000000 +0200 +++ linux-2.6.16-rt20/kernel/futex.c 2006-05-04 10:58:55.000000000 +0200 @@ -835,17 +835,20 @@ static int futex_requeue(u32 __user *uad if (++ret <= nr_wake) { wake_futex(this); } else { - list_move_tail(&this->list, &hb2->chain); - this->lock_ptr = &hb2->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 == &hb2->chain && head1 != &next->list) - head1 = &this->list; } } - 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/
| |