Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932726AbcLBIVb (ORCPT ); Fri, 2 Dec 2016 03:21:31 -0500 Received: from Galois.linutronix.de ([146.0.238.70]:59329 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932173AbcLBIV3 (ORCPT ); Fri, 2 Dec 2016 03:21:29 -0500 Date: Fri, 2 Dec 2016 09:18:37 +0100 (CET) From: Thomas Gleixner To: Peter Zijlstra cc: LKML , David Daney , Ingo Molnar , Steven Rostedt , Sebastian Siewior , Will Deacon , Mark Rutland , stable@vger.kernel.org Subject: Re: [patch 1/4] rtmutex: Prevent dequeue vs. unlock race In-Reply-To: <20161201182542.GP3045@worktop.programming.kicks-ass.net> Message-ID: References: <20161130205431.629977871@linutronix.de> <20161130210030.351136722@linutronix.de> <20161201182542.GP3045@worktop.programming.kicks-ass.net> User-Agent: Alpine 2.20 (DEB 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1106 Lines: 27 On Thu, 1 Dec 2016, Peter Zijlstra wrote: > On Wed, Nov 30, 2016 at 09:04:41PM -0000, Thomas Gleixner wrote: > > It's remarkable that the test program provided by David triggers on ARM64 > > and MIPS64 really quick, but it refuses to reproduce on x8664, while the > > problem exists there as well. That refusal might explain that this got not > > discovered earlier despite the bug existing from day one of the rtmutex > > implementation more than 10 years ago. > > > - clear_rt_mutex_waiters(lock); > > So that compiles into: > > andq $0xfffffffffffffffe,0x48(%rbx) > > With is a RmW memop. Now per the architecture documents we can decompose > that into a normal load-store and the race exists. But I would not be > surprised if that starts with the cacheline in exclusive mode (because > it knows it will do the store). Which makes it a very tiny race indeed. If it really takes the cacheline exclusive right away, then there is no race because the cmpxchg has to wait for release and will see the store. If the cmpxchg comes first the RmW will see the new value. Fun stuff, isn't it? tglx