[4.2.y-ckt stable] Patch "futex: Acknowledge a new waiter in counter before plist" has been added to the 4.2.y-ckt tree

Kamal Mostafa kamal at canonical.com
Mon Apr 25 19:44:45 UTC 2016


This is a note to let you know that I have just added a patch titled

    futex: Acknowledge a new waiter in counter before plist

to the linux-4.2.y-queue branch of the 4.2.y-ckt extended stable tree 
which can be found at:

    http://kernel.ubuntu.com/git/ubuntu/linux.git/log/?h=linux-4.2.y-queue

This patch is scheduled to be released in version 4.2.8-ckt9.

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 4.2.y-ckt tree, see
https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable

Thanks.
-Kamal

---8<------------------------------------------------------------

>From 9a913a2a9040d9f66761b93f1818427ca32ed6c4 Mon Sep 17 00:00:00 2001
From: Davidlohr Bueso <dave at stgolabs.net>
Date: Wed, 20 Apr 2016 20:09:24 -0700
Subject: futex: Acknowledge a new waiter in counter before plist

commit fe1bce9e2107ba3a8faffe572483b6974201a0e6 upstream.

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.

Suggested-by: Peter Zijlstra <peterz at infradead.org>
Signed-off-by: Davidlohr Bueso <dbueso at suse.de>
Cc: Davidlohr Bueso <dave at stgolabs.net>
Cc: bigeasy at linutronix.de
Cc: dvhart at infradead.org
Link: http://lkml.kernel.org/r/1461208164-29150-1-git-send-email-dave@stgolabs.net
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
Signed-off-by: Kamal Mostafa <kamal at canonical.com>
---
 kernel/futex.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/futex.c b/kernel/futex.c
index df4203b2..02113e5 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -1395,8 +1395,8 @@ void requeue_futex(struct futex_q *q, struct futex_hash_bucket *hb1,
 	if (likely(&hb1->chain != &hb2->chain)) {
 		plist_del(&q->list, &hb1->chain);
 		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.7.4





More information about the kernel-team mailing list