Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751979AbcDUDJl (ORCPT ); Wed, 20 Apr 2016 23:09:41 -0400 Received: from smtp2.provo.novell.com ([137.65.250.81]:33461 "EHLO smtp2.provo.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751533AbcDUDJi (ORCPT ); Wed, 20 Apr 2016 23:09:38 -0400 From: Davidlohr Bueso To: mingo@kernel.org, tglx@linutronix.de Cc: peterz@infradead.org, bigeasy@linutronix.de, dvhart@infradead.org, stable@kernel.org, linux-kernel@vger.kernel.org, Davidlohr Bueso , Davidlohr Bueso Subject: [PATCH -tip] futex: Acknowledge a new waiter in counter before plist Date: Wed, 20 Apr 2016 20:09:24 -0700 Message-Id: <1461208164-29150-1-git-send-email-dave@stgolabs.net> X-Mailer: git-send-email 2.8.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 926 Lines: 28 Otherwise an incoming waker on the dest hash bucket can miss the waiter adding itself to the plist during the lockless check optimization (small window but still the correct way of doing this); similarly to the decrement counterpart. Cc: stable@kernel.org (since v3.14+) Suggested-by: Peter Zijlstra Signed-off-by: Davidlohr Bueso --- kernel/futex.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/futex.c b/kernel/futex.c index e66e8d4fccff..913f05cfe8b8 100644 --- a/kernel/futex.c +++ b/kernel/futex.c @@ -1745,8 +1745,8 @@ void requeue_futex(struct futex_q *q, struct futex_hash_bucket *hb1, if (likely(&hb1->chain != &hb2->chain)) { hb_remove_q(q, hb1); hb_waiters_dec(hb1); - plist_add(&q->list, &hb2->chain); hb_waiters_inc(hb2); + plist_add(&q->list, &hb2->chain); q->lock_ptr = &hb2->lock; } get_futex_key_refs(key2); -- 2.8.1