From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756318AbcJMPS4 (ORCPT ); Thu, 13 Oct 2016 11:18:56 -0400 Received: from foss.arm.com ([217.140.101.70]:51318 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751971AbcJMPSt (ORCPT ); Thu, 13 Oct 2016 11:18:49 -0400 Date: Thu, 13 Oct 2016 16:18:48 +0100 From: Will Deacon To: Peter Zijlstra Cc: Linus Torvalds , Waiman Long , Jason Low , Ding Tianhong , Thomas Gleixner , Ingo Molnar , Imre Deak , Linux Kernel Mailing List , Davidlohr Bueso , Tim Chen , Terry Rudd , "Paul E. McKenney" , Jason Low , Chris Wilson , Daniel Vetter Subject: Re: [PATCH -v4 2/8] locking/mutex: Rework mutex::owner Message-ID: <20161013151848.GC13138@arm.com> References: <20161007145243.361481786@infradead.org> <20161007150210.995135898@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161007150210.995135898@infradead.org> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Oct 07, 2016 at 04:52:45PM +0200, Peter Zijlstra wrote: > The current mutex implementation has an atomic lock word and a > non-atomic owner field. > > This disparity leads to a number of issues with the current mutex code > as it means that we can have a locked mutex without an explicit owner > (because the owner field has not been set, or already cleared). > > This leads to a number of weird corner cases, esp. between the > optimistic spinning and debug code. Where the optimistic spinning > code needs the owner field updated inside the lock region, the debug > code is more relaxed because the whole lock is serialized by the > wait_lock. > > Also, the spinning code itself has a few corner cases where we need to > deal with a held lock without an owner field. > > Furthermore, it becomes even more of a problem when trying to fix > starvation cases in the current code. We end up stacking special case > on special case. > > To solve this rework the basic mutex implementation to be a single > atomic word that contains the owner and uses the low bits for extra > state. > > This matches how PI futexes and rt_mutex already work. By having the > owner an integral part of the lock state a lot of the problems > dissapear and we get a better option to deal with starvation cases, > direct owner handoff. > > Changing the basic mutex does however invalidate all the arch specific > mutex code; this patch leaves that unused in-place, a later patch will > remove that. > > > Signed-off-by: Peter Zijlstra (Intel) > --- > include/linux/mutex-debug.h | 24 -- > include/linux/mutex.h | 46 +++-- > kernel/locking/mutex-debug.c | 13 - > kernel/locking/mutex-debug.h | 10 - > kernel/locking/mutex.c | 371 ++++++++++++++++++------------------------- > kernel/locking/mutex.h | 26 --- > kernel/sched/core.c | 2 > 7 files changed, 187 insertions(+), 305 deletions(-) Looks good to me: Reviewed-by: Will Deacon Will