Received: by 2002:a05:7412:8521:b0:e2:908c:2ebd with SMTP id t33csp2044697rdf; Mon, 6 Nov 2023 03:11:40 -0800 (PST) X-Google-Smtp-Source: AGHT+IF7tPHfq5pzdGwo/P8AVo4kFiwG8lbOCGngpbWGOFEVPUTX8RF1VsQV8QrBxR116G4mjBsz X-Received: by 2002:a05:6a00:b8e:b0:68a:5395:7aa5 with SMTP id g14-20020a056a000b8e00b0068a53957aa5mr33408028pfj.17.1699269100488; Mon, 06 Nov 2023 03:11:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699269100; cv=none; d=google.com; s=arc-20160816; b=vZxbehylrXrlvT4DHB4tArxxi5KaAbGnl3E21/nSZ5u/DY5XniIuD6yS6f+ES36fSQ P11Z+6Y9wdQlHPhqvrC/+c95u8IYJvcVsnfAgTYQLAsE8WeLNV2OvLD887v9NwEGIASx Xge3/qAtQpZn+fb33SVN5W+IVhrbzmS79sNXwXFGD1EotxmUsdHqtY8pHgm7KcH3C6YL G37fuc8JXndkdGWAZy6IZyeEJFe+Msgn9tdUso/xr7FQJybo9605/2L58QYdEUslineY HBpcYTv/Mj5GgTmNv225jqb7l3hf+2cfbvUkY8crxec2n6R3CaXTqb/bIoEFEEW/elyW RChQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=vUpyzL3z2/C5RrFQiyOF3f2JCk8iw10/Zg7NgkeCw/E=; fh=X0LGzr67zCQH0xRo8jBd0aRLVwLoUVKGnFTmrBMm5C8=; b=ns8eouaLpKtnYTK38bNJulzVwtsPORiLIJcf4kwwAJVvx+tmy2xOCCCZEscZ9fvqNN d0Y+f0WHnns+ZWF/fKuzFxRXl9+rQLyqs67Fl2qPwXTsl0G1cqAg2qPqT3FSbEUrVnTa voM3W2H6ueEztDOAE1c06cGZBju2UJCBNchsWis61kxroUWXbUtcP4vKlVCGoSfFgUAy KQZy4mmmUQnvUmoFzYOTmEdJWOZR5iim6xIhFgvV08ujtGFSEn3Bqr9OOqBTNgJv/mjs 0luaSrTp5CatlRYlJGWPrHHR8z9YgVjd8+5hj4JvjomX/9MGewsZFN2hW3Qk0tYklsh+ H10g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b="Jm/0eX5X"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from fry.vger.email (fry.vger.email. [2620:137:e000::3:8]) by mx.google.com with ESMTPS id i75-20020a636d4e000000b005b95fbb1750si7330281pgc.113.2023.11.06.03.11.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Nov 2023 03:11:40 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) client-ip=2620:137:e000::3:8; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b="Jm/0eX5X"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id C4B688080E20; Mon, 6 Nov 2023 03:11:37 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230155AbjKFLLW (ORCPT + 99 others); Mon, 6 Nov 2023 06:11:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55988 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229974AbjKFLLU (ORCPT ); Mon, 6 Nov 2023 06:11:20 -0500 Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 39226BB for ; Mon, 6 Nov 2023 03:11:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Transfer-Encoding: Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=vUpyzL3z2/C5RrFQiyOF3f2JCk8iw10/Zg7NgkeCw/E=; b=Jm/0eX5XG+QccwGne3HBFtqhrU 10Q6vmKKfAMRz0hNIwIUexTPMf8YXBciHhbYi9nGyExHExOSTAYXeB4MeyKPLcwgPYdpPGch3p0ro VfYf1cDs/9WsASgvvzfHX8+sy90Hxvs2xw7Rwaxm1Q4NF2TuckCW0Chfh1ce4Ea0tc4xlW1UQDP8v XCZrdLVP/7sS1s6YsHF6P5n/L4nuLcXpVIVlTnwhqk5TnTGvW3BCwai99KrQdr6rauhyo8T4ud8Oh ZurA3r9gCyKQMhngIYtn4nSsQC+p61meKsLzTeya9R7XbLXjfG/kqKzpsbl3sNqv4d5s6Su659qyH q38D5haw==; Received: from j130084.upc-j.chello.nl ([24.132.130.84] helo=noisy.programming.kicks-ass.net) by casper.infradead.org with esmtpsa (Exim 4.94.2 #2 (Red Hat Linux)) id 1qzxVY-005ZUp-Ac; Mon, 06 Nov 2023 11:11:05 +0000 Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000) id A899430049D; Mon, 6 Nov 2023 12:11:04 +0100 (CET) Date: Mon, 6 Nov 2023 12:11:04 +0100 From: Peter Zijlstra To: Alexander Aring Cc: will@kernel.org, gfs2@lists.linux.dev, boqun.feng@gmail.com, mark.rutland@arm.com, linux-kernel@vger.kernel.org Subject: Re: [RFC 1/2] refcount: introduce generic lockptr funcs Message-ID: <20231106111104.GK8262@noisy.programming.kicks-ass.net> References: <20231103161635.1902667-1-aahringo@redhat.com> <20231103185414.GD8262@noisy.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Mon, 06 Nov 2023 03:11:38 -0800 (PST) On Fri, Nov 03, 2023 at 03:20:08PM -0400, Alexander Aring wrote: > Hi, > > On Fri, Nov 3, 2023 at 2:54 PM Peter Zijlstra wrote: > > > > On Fri, Nov 03, 2023 at 12:16:34PM -0400, Alexander Aring wrote: > > > > > diff --git a/lib/refcount.c b/lib/refcount.c > > > index a207a8f22b3c..e28678f0f473 100644 > > > --- a/lib/refcount.c > > > +++ b/lib/refcount.c > > > @@ -94,6 +94,34 @@ bool refcount_dec_not_one(refcount_t *r) > > > } > > > EXPORT_SYMBOL(refcount_dec_not_one); > > > > > > +bool refcount_dec_and_lockptr(refcount_t *r, void (*lock)(void *lockptr), > > > + void (*unlock)(void *lockptr), void *lockptr) > > > +{ > > > + if (refcount_dec_not_one(r)) > > > + return false; > > > + > > > + lock(lockptr); > > > + if (!refcount_dec_and_test(r)) { > > > + unlock(lockptr); > > > + return false; > > > + } > > > + > > > + return true; > > > +} > > > +EXPORT_SYMBOL(refcount_dec_and_lockptr); > > > > This is terrible, you're forcing indirect calls on everything. > > > > Okay, I see. How about introducing a macro producing all the code at > preprocessor time? __always_inline should work, then you get constant propagation for the function pointer. But indeed, perhaps a macro is more convenient vs the irq flags argument. You'll then end up with something like: #define __refcount_dec_and_lock(_ref, _lock, _unlock) \ ({ bool _ret = false; \ if (!refcount_dec_not_one(_ref)) { \ _lock; \ if (!refcount_dec_and_test(_ref)) { \ _unlock; \ } else { \ _ret = true; \ } \ } \ _ret; \ }) bool refcount_dec_and_spinlock_irqsave(refcount_t *r, spinlock_t *lock, unsigned long *flags) { return __refcount_dec_and_lock(r, spin_lock_irqsave(*lock, *flags), spin_unlock_irqrestore(*lock, *flags)); }