From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Zijlstra Subject: Re: [PATCH v2 02/11] locking/ww_mutex: Re-check ww->ctx in the inner optimistic spin loop Date: Tue, 6 Dec 2016 16:06:20 +0100 Message-ID: <20161206150620.GT3045@worktop.programming.kicks-ass.net> References: <1480601214-26583-1-git-send-email-nhaehnle@gmail.com> <1480601214-26583-3-git-send-email-nhaehnle@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2001:1868:205::9]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6BDB789B8E for ; Tue, 6 Dec 2016 15:06:36 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1480601214-26583-3-git-send-email-nhaehnle@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Nicolai =?iso-8859-1?Q?H=E4hnle?= Cc: Maarten Lankhorst , Nicolai =?iso-8859-1?Q?H=E4hnle?= , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Ingo Molnar List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBEZWMgMDEsIDIwMTYgYXQgMDM6MDY6NDVQTSArMDEwMCwgTmljb2xhaSBIw6Robmxl IHdyb3RlOgo+ICsrKyBiL2tlcm5lbC9sb2NraW5nL211dGV4LmMKPiBAQCAtMzUwLDcgKzM1MCw4 IEBAIHd3X211dGV4X3NldF9jb250ZXh0X3Nsb3dwYXRoKHN0cnVjdCB3d19tdXRleCAqbG9jaywK PiAgICogYWNjZXNzIGFuZCBub3QgcmVsaWFibGUuCj4gICAqLwo+ICBzdGF0aWMgbm9pbmxpbmUK PiAtYm9vbCBtdXRleF9zcGluX29uX293bmVyKHN0cnVjdCBtdXRleCAqbG9jaywgc3RydWN0IHRh c2tfc3RydWN0ICpvd25lcikKPiArYm9vbCBtdXRleF9zcGluX29uX293bmVyKHN0cnVjdCBtdXRl eCAqbG9jaywgc3RydWN0IHRhc2tfc3RydWN0ICpvd25lciwKPiArCQkJIGJvb2wgdXNlX3d3X2N0 eCwgc3RydWN0IHd3X2FjcXVpcmVfY3R4ICp3d19jdHgpCj4gIHsKPiAgCWJvb2wgcmV0ID0gdHJ1 ZTsKPiAgCj4gQEAgLTM3Myw2ICszNzQsMjggQEAgYm9vbCBtdXRleF9zcGluX29uX293bmVyKHN0 cnVjdCBtdXRleCAqbG9jaywgc3RydWN0IHRhc2tfc3RydWN0ICpvd25lcikKPiAgCQkJYnJlYWs7 Cj4gIAkJfQo+ICAKPiArCQlpZiAodXNlX3d3X2N0eCAmJiB3d19jdHgtPmFjcXVpcmVkID4gMCkg ewo+ICsJCQlzdHJ1Y3Qgd3dfbXV0ZXggKnd3Owo+ICsKPiArCQkJd3cgPSBjb250YWluZXJfb2Yo bG9jaywgc3RydWN0IHd3X211dGV4LCBiYXNlKTsKPiArCj4gKwkJCS8qCj4gKwkJCSAqIElmIHd3 LT5jdHggaXMgc2V0IHRoZSBjb250ZW50cyBhcmUgdW5kZWZpbmVkLCBvbmx5Cj4gKwkJCSAqIGJ5 IGFjcXVpcmluZyB3YWl0X2xvY2sgdGhlcmUgaXMgYSBndWFyYW50ZWUgdGhhdAo+ICsJCQkgKiB0 aGV5IGFyZSBub3QgaW52YWxpZCB3aGVuIHJlYWRpbmcuCj4gKwkJCSAqCj4gKwkJCSAqIEFzIHN1 Y2gsIHdoZW4gZGVhZGxvY2sgZGV0ZWN0aW9uIG5lZWRzIHRvIGJlCj4gKwkJCSAqIHBlcmZvcm1l ZCB0aGUgb3B0aW1pc3RpYyBzcGlubmluZyBjYW5ub3QgYmUgZG9uZS4KPiArCQkJICoKPiArCQkJ ICogQ2hlY2sgdGhpcyBpbiBldmVyeSBpbm5lciBpdGVyYXRpb24gYmVjYXVzZSB3ZSBtYXkKPiAr CQkJICogYmUgcmFjaW5nIGFnYWluc3QgYW5vdGhlciB0aHJlYWQncyB3d19tdXRleF9sb2NrLgo+ ICsJCQkgKi8KPiArCQkJaWYgKFJFQURfT05DRSh3dy0+Y3R4KSkgewo+ICsJCQkJcmV0ID0gZmFs c2U7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCX0KPiArCj4gIAkJY3B1X3JlbGF4KCk7Cj4g IAl9Cj4gIAlyY3VfcmVhZF91bmxvY2soKTsKCkFzaWRlIGZyb20gdGhlIHZhbGlkIHF1ZXN0aW9u IGFib3V0IG11dGV4X2Nhbl9zcGluX29uX293bmVyKCkgdGhlcmUncwphbm90aGVyICdwcm9ibGVt JyBoZXJlLCBtdXRleF9zcGluX29uX293bmVyKCkgaXMgbWFya2VkIG5vaW5saW5lLCBzbyBhbGwK dGhlIHVzZV93d19jdHggc3R1ZmYgZG9lc24ndCAnd29yaycgaGVyZS4KCkFzIGlzLCBJIHRoaW5r IHdlJ3JlIG1pc3NpbmcgYW4gX19hbHdheXNfaW5saW5lIG9uCm11dGV4X29wdGltaXN0aWNfc3Bp biwgSSdsbCBoYXZlIHRvIGdvIHNlZSB3aGF0IHRoYXQgZG9lcyBmb3IgY29kZQpnZW5lcmF0aW9u LCBidXQgZ2l2ZW4gYm90aCBAdXNlX3d3X2N0eCBhbmQgQHdhaXRlciB0aGVyZSB0aGF0IG1ha2Vz CnNlbnNlLgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753382AbcLFPGl (ORCPT ); Tue, 6 Dec 2016 10:06:41 -0500 Received: from bombadil.infradead.org ([198.137.202.9]:49020 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751798AbcLFPGk (ORCPT ); Tue, 6 Dec 2016 10:06:40 -0500 Date: Tue, 6 Dec 2016 16:06:20 +0100 From: Peter Zijlstra To: Nicolai =?iso-8859-1?Q?H=E4hnle?= Cc: linux-kernel@vger.kernel.org, Nicolai =?iso-8859-1?Q?H=E4hnle?= , Ingo Molnar , Maarten Lankhorst , Daniel Vetter , Chris Wilson , dri-devel@lists.freedesktop.org Subject: Re: [PATCH v2 02/11] locking/ww_mutex: Re-check ww->ctx in the inner optimistic spin loop Message-ID: <20161206150620.GT3045@worktop.programming.kicks-ass.net> References: <1480601214-26583-1-git-send-email-nhaehnle@gmail.com> <1480601214-26583-3-git-send-email-nhaehnle@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1480601214-26583-3-git-send-email-nhaehnle@gmail.com> User-Agent: Mutt/1.5.22.1 (2013-10-16) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Dec 01, 2016 at 03:06:45PM +0100, Nicolai Hähnle wrote: > +++ b/kernel/locking/mutex.c > @@ -350,7 +350,8 @@ ww_mutex_set_context_slowpath(struct ww_mutex *lock, > * access and not reliable. > */ > static noinline > -bool mutex_spin_on_owner(struct mutex *lock, struct task_struct *owner) > +bool mutex_spin_on_owner(struct mutex *lock, struct task_struct *owner, > + bool use_ww_ctx, struct ww_acquire_ctx *ww_ctx) > { > bool ret = true; > > @@ -373,6 +374,28 @@ bool mutex_spin_on_owner(struct mutex *lock, struct task_struct *owner) > break; > } > > + if (use_ww_ctx && ww_ctx->acquired > 0) { > + struct ww_mutex *ww; > + > + ww = container_of(lock, struct ww_mutex, base); > + > + /* > + * If ww->ctx is set the contents are undefined, only > + * by acquiring wait_lock there is a guarantee that > + * they are not invalid when reading. > + * > + * As such, when deadlock detection needs to be > + * performed the optimistic spinning cannot be done. > + * > + * Check this in every inner iteration because we may > + * be racing against another thread's ww_mutex_lock. > + */ > + if (READ_ONCE(ww->ctx)) { > + ret = false; > + break; > + } > + } > + > cpu_relax(); > } > rcu_read_unlock(); Aside from the valid question about mutex_can_spin_on_owner() there's another 'problem' here, mutex_spin_on_owner() is marked noinline, so all the use_ww_ctx stuff doesn't 'work' here. As is, I think we're missing an __always_inline on mutex_optimistic_spin, I'll have to go see what that does for code generation, but given both @use_ww_ctx and @waiter there that makes sense.