From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Zijlstra Subject: Re: [PATCH 1/4] locking/ww_mutex: add ww_mutex_is_owned_by function v3 Date: Tue, 20 Feb 2018 14:57:09 +0100 Message-ID: <20180220135709.GD25201@hirez.programming.kicks-ass.net> References: <20180220125829.27060-1-christian.koenig@amd.com> <20180220131253.GF25314@hirez.programming.kicks-ass.net> <8fd80334-4d0e-8ed0-8a09-02a7e36a0eae@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <8fd80334-4d0e-8ed0-8a09-02a7e36a0eae@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: christian.koenig@amd.com Cc: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org List-Id: amd-gfx.lists.freedesktop.org T24gVHVlLCBGZWIgMjAsIDIwMTggYXQgMDI6MjY6NTVQTSArMDEwMCwgQ2hyaXN0aWFuIEvDtm5p ZyB3cm90ZToKPiA+ID4gK3N0YXRpYyBpbmxpbmUgYm9vbCB3d19tdXRleF9pc19vd25lZF9ieShz dHJ1Y3Qgd3dfbXV0ZXggKmxvY2ssCj4gPiA+ICsJCQkJCXN0cnVjdCB3d19hY3F1aXJlX2N0eCAq Y3R4KQo+ID4gPiArewo+ID4gPiArCWlmIChjdHgpCj4gPiA+ICsJCXJldHVybiBsaWtlbHkoUkVB RF9PTkNFKGxvY2stPmN0eCkgPT0gY3R4KTsKPiA+ID4gKwllbHNlCj4gPiA+ICsJCXJldHVybiBs aWtlbHkoX19tdXRleF9vd25lcigmbG9jay0+YmFzZSkgPT0gY3VycmVudCk7Cj4gPiA+ICt9Cj4g PiBNdWNoIGJldHRlciB0aGFuIHRoZSBwcmV2aW91cyB2ZXJzaW9uLiBJZiB5b3Ugd2FudCB0byBi aWtlLXNoZWQsIHlvdSBjYW4KPiA+IGxlYXZlIG91dCB0aGUgJ2Vsc2UnIGFuZCB1bmluZGVudCB0 aGUgbGFzdCBsaW5lLgo+IAo+IFRoYW5rcyBmb3IgdGhlIHN1Z2dlc3Rpb24sIGdvaW5nIHRvIGRv IHRoaXMuCgpZb3UgbWlnaHQgYWxzbyB3YW50IGxpa2VseShjdHgpLCBzaW5jZSB3d19tdXRleCB3 aXRob3V0IGN0eCBpcwphLXR5cGljYWwgSSB3b3VsZCB0aGluay4KCj4gPiBJIGRvIHdvcnJ5IGFi b3V0IHBvdGVudGlhbCB1c2VycyBvZiAuY3R4ID0gTlVMTCwgdGhvdWdoLiBJdCBtYWtlcyBpdCBm YXIKPiA+IHRvbyBlYXN5IHRvIGRvIHJlY3Vyc2l2ZSBsb2NraW5nLCB3aGljaCBpcyBzb21ldGhp bmcgd2Ugc2hvdWxkIHN0cm9uZ2x5Cj4gPiBkaXNjb3VyYWdlLgo+IAo+IFdlbGwsIG9uZSBvZiB0 aGUgYWRkcmVzc2VkIHVzZSBjYXNlcyBpcyBpbmRlZWQgY2hlY2tpbmcgZm9yIHJlY3Vyc2l2ZQo+ IGxvY2tpbmcuIEJ1dCByZWN1cnNpdmUgbG9ja2luZyBpcyBzb21ldGhpbmcgcmF0aGVyIG5vcm1h bCBmb3Igd3dfbXV0ZXggYW5kCj4gd2UgYXJlIGp1c3QgZXhlcmNpc2luZyBhbiBleGlzdGluZyBj b2RlIHBhdGguCgpCdXQgdGhhdCB3b3VsZCBiZSB0aGUgY3R4IGNhc2UsIHJpZ2h0PyBJJ20gbm90 IHN1cmUgdGhlcmUgaXMgYSBsb3Qgb2YKIWN0eCB1c2Ugb3V0IHRoZXJlLCBhbmQgaW4gdGhhdCBj YXNlIGl0IHJlYWxseSBpcyByYXRoZXIgbGlrZSBhIG5vcm1hbAptdXRleC4KCj4gRS5nLiB0aGUg bW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoZSB3d19tdXRleCBpcyBpbiB0aGUgZ3JhcGhpY3Mg ZHJpdmVycwo+IHdoZXJlIHVzZXNwYWNlIHNlbmRzIHVzIGEgbGlzdCBvZiBidWZmZXIgb2JqZWN0 cyB0byB3b3JrIHdpdGguCj4gCj4gTm93IHdoZW4gdXNlcnNwYWNlIHNlbmRzIHVzIGR1cGxpY2F0 ZXMgaW4gdGhhdCBidWZmZXIgbGlzdCB0aGUgZXhwZWN0YXRpb24KPiBpcyB0byBnZXQgLUVBTFJF QURZIGZyb20gd3dfbXV0ZXhfbG9jayB3aGVuIHdlIHRyeSB0byBsb2NrIHRoZSBzYW1lIHd3X211 dGV4Cj4gdHdpY2UuCgpSaWdodCwgSSByZW1lbWJlciB0aGF0IG11Y2guLiA6LSkKCj4gVGhlIGlu dGVudGlvbiBiZWhpbmQgdGhpcyBmdW5jdGlvbiBpcyBub3cgdG8gYSkgYmUgYWJsZSB0byBleHRl bmQgdGhvc2UKPiBjaGVja3MgdG8gbWFrZSBzdXJlIHVzZXIgc3BhY2UgZG9lc24ndCBzZW5kcyB1 cyBwb3RlbnRpYWxseSBoYXJtZnVsIG5vbnNlbnNlCj4gYW5kIGIpIGFsbG93IHRvIGNoZWNrIGZv ciByZWN1cnNpb24gaW4gVFRNIGR1cmluZyBidWZmZXIgb2JqZWN0IGV2aWN0aW9uCj4gd2hpY2gg dXNlcyB3d19tdXRleF90cnlsb2NrIGluc3RlYWQgb2Ygd3dfbXV0ZXhfbG9jay4KCk9LLCBidXQg bmVpdGhlciBjYXNlIHdvdWxkIGluIGZhY3QgbmVlZCB0aGUgIWN0eCBjYXNlIHJpZ2h0PyBUaGF0 J3MganVzdAp0aGVyZSBmb3IgY29tcGxldGVuZXNzIHNha2U/CgpCdXQgeWVzLCBJIGNhbm5vdCB0 aGluayBvZiBhIGJldHRlciBmYWxsYmFjayB0aGVyZSBlaXRoZXIuCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751360AbeBTN5P (ORCPT ); Tue, 20 Feb 2018 08:57:15 -0500 Received: from merlin.infradead.org ([205.233.59.134]:56032 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751300AbeBTN5N (ORCPT ); Tue, 20 Feb 2018 08:57:13 -0500 Date: Tue, 20 Feb 2018 14:57:09 +0100 From: Peter Zijlstra To: christian.koenig@amd.com Cc: amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/4] locking/ww_mutex: add ww_mutex_is_owned_by function v3 Message-ID: <20180220135709.GD25201@hirez.programming.kicks-ass.net> References: <20180220125829.27060-1-christian.koenig@amd.com> <20180220131253.GF25314@hirez.programming.kicks-ass.net> <8fd80334-4d0e-8ed0-8a09-02a7e36a0eae@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <8fd80334-4d0e-8ed0-8a09-02a7e36a0eae@gmail.com> User-Agent: Mutt/1.9.2 (2017-12-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Feb 20, 2018 at 02:26:55PM +0100, Christian König wrote: > > > +static inline bool ww_mutex_is_owned_by(struct ww_mutex *lock, > > > + struct ww_acquire_ctx *ctx) > > > +{ > > > + if (ctx) > > > + return likely(READ_ONCE(lock->ctx) == ctx); > > > + else > > > + return likely(__mutex_owner(&lock->base) == current); > > > +} > > Much better than the previous version. If you want to bike-shed, you can > > leave out the 'else' and unindent the last line. > > Thanks for the suggestion, going to do this. You might also want likely(ctx), since ww_mutex without ctx is a-typical I would think. > > I do worry about potential users of .ctx = NULL, though. It makes it far > > too easy to do recursive locking, which is something we should strongly > > discourage. > > Well, one of the addressed use cases is indeed checking for recursive > locking. But recursive locking is something rather normal for ww_mutex and > we are just exercising an existing code path. But that would be the ctx case, right? I'm not sure there is a lot of !ctx use out there, and in that case it really is rather like a normal mutex. > E.g. the most common use case for the ww_mutex is in the graphics drivers > where usespace sends us a list of buffer objects to work with. > > Now when userspace sends us duplicates in that buffer list the expectation > is to get -EALREADY from ww_mutex_lock when we try to lock the same ww_mutex > twice. Right, I remember that much.. :-) > The intention behind this function is now to a) be able to extend those > checks to make sure user space doesn't sends us potentially harmful nonsense > and b) allow to check for recursion in TTM during buffer object eviction > which uses ww_mutex_trylock instead of ww_mutex_lock. OK, but neither case would in fact need the !ctx case right? That's just there for completeness sake? But yes, I cannot think of a better fallback there either.