From nobody Thu Dec 18 20:37:56 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0F5C9C83F15 for ; Wed, 30 Aug 2023 19:23:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245449AbjH3TWT (ORCPT ); Wed, 30 Aug 2023 15:22:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52166 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343956AbjH3Rfi (ORCPT ); Wed, 30 Aug 2023 13:35:38 -0400 Received: from rere.qmqm.pl (rere.qmqm.pl [91.227.64.183]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DEB991A2 for ; Wed, 30 Aug 2023 10:35:35 -0700 (PDT) Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 4RbWfG0m3Zzkh; Wed, 30 Aug 2023 19:35:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1693416934; bh=HM9xVlM37R0H8C6zhS+PEHaYWeUHbqjwBKdmiA2Kahc=; h=Date:In-Reply-To:References:Subject:From:To:Cc:From; b=PAE0P/P65FT0kw/23b6ehZwHwq7z5Num3MBY060IIsPdX+QyQlAECOrv+1Tqk3Nw3 d865p7Ec/t38auBAVje+bM7yl32i2CyCilg4GY//mdGec8zSRLT72epGGDFIIHYjdy 8Qb5LPjQQSvzOswKNa+E7iFo+/PzksSUwvffmnn32qyqP5PSXj6OiLLxpAutM3hT4Z gykvdQUNBRijrHWp3n/Z5S7wCbfGABaDmEeft8tQ4KufSFXXOmwEAbfqQ0V7gAe1PV 6K1nt7pEk1QZGh60lF+O1RI7WVZJbRp7Cmm1NBazGlzHECLuOTF/zaaqFpwqubAg2M tBcWq6YJxgLvw== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.8 at mail Date: Wed, 30 Aug 2023 19:35:33 +0200 Message-Id: <711d447ac7160ca275975f6aba51e19bfcb4f742.1693416477.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: Subject: [PATCH v2 7/7] regulator/core: regulator_lock_two: remove duplicate locking code MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= To: Liam Girdwood , Mark Brown Cc: Stephen Boyd , Douglas Anderson , linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Make regulator_lock_two() shorter by observing that we have only two locks and when swapped earlier the retry code becomes identical to the normal (optimistic) path. Signed-off-by: Micha=C5=82 Miros=C5=82aw --- drivers/regulator/core.c | 30 +++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 3f9621621da9..36cec3fbcdea 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -216,37 +216,29 @@ static int regulator_lock_two(struct regulator_dev *r= dev1, struct regulator_dev *rdev2, struct ww_acquire_ctx *ww_ctx) { - struct regulator_dev *held, *contended; int ret; =20 ww_acquire_init(ww_ctx, ®ulator_ww_class); =20 - /* Try to just grab both of them */ ret =3D regulator_lock_nested(rdev1, ww_ctx); if (WARN_ON(ret)) goto exit; - ret =3D regulator_lock_nested(rdev2, ww_ctx); - if (!ret) - goto exit; - if (WARN_ON(ret !=3D -EDEADLOCK)) { - regulator_unlock(rdev1); - goto exit; - } =20 - held =3D rdev1; - contended =3D rdev2; while (true) { - regulator_unlock(held); + ret =3D regulator_lock_nested(rdev2, ww_ctx); + if (!ret) + break; =20 - regulator_lock_contended(contended, ww_ctx); - swap(held, contended); - ret =3D regulator_lock_nested(contended, ww_ctx); + regulator_unlock(rdev1); =20 - if (ret !=3D -EDEADLOCK) { - if (WARN_ON(ret)) - regulator_unlock(held); + if (WARN_ON(ret !=3D -EDEADLOCK)) break; - } + + /* Swap the locking order and retry. */ + + swap(rdev1, rdev2); + + regulator_lock_contended(rdev1, ww_ctx); } =20 exit: --=20 2.39.2