From nobody Wed Dec 17 16:12:13 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 2B125EE49A3 for ; Sun, 20 Aug 2023 01:50:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229547AbjHTBpZ (ORCPT ); Sat, 19 Aug 2023 21:45:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54144 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229482AbjHTBpY (ORCPT ); Sat, 19 Aug 2023 21:45:24 -0400 Received: from rere.qmqm.pl (rere.qmqm.pl [91.227.64.183]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 102DAD36EF for ; Sat, 19 Aug 2023 15:46:14 -0700 (PDT) Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 4RSv3l1vHczTw; Sun, 20 Aug 2023 00:46:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1692485171; bh=VJNi4PYf+iiPV3elFHZZCExCQP1Fvm2zJodP+scZLEU=; h=Date:In-Reply-To:References:Subject:From:To:Cc:From; b=RU7ZWAZ1Y/BsnIHZDX2/YiAZyTQQ8HI88v/qdccDWK+wTRzzyDSxA4DOS5KXbK6IJ yM1NrNKgqOpqvctKdxJJJJKTioqtWlhw4iDD1aoIFRjyDeSpqI1T//GrwBkLITvwn0 e6Q4TRy4S0AhXBynJ9dqJ6HxE58Qw0nz21y0bR8Lho/g26/R9mwrs/67AfSyAfcFRc 4cCMgmuiu1HwAOp9LkDRzvEeFP9RDcvPJo4sP18yu+kGxYoy6x9waR0XRjHVqkr8zJ bM+kxrYCHYfYOLNEJyJAg6e54W6pWXKUc83yOAX7FChaXmxHmdvd6Mfg7UQSatrr+X d7RSt3FLv6oIg== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.8 at mail Date: Sun, 20 Aug 2023 00:46:11 +0200 Message-Id: <682e260d8cb75c34f79ff7fcc3c4bb8586140cc4.1692484240.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: Subject: [PATCH 6/6] regulator: core: simplify lock_two() 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: linux-kernel@vger.kernel.org, Dmitry Osipenko , Douglas Anderson 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 | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index d8c2277cea36..9736507b62ff 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -201,37 +201,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) - return 0; - if (WARN_ON(ret !=3D -EDEADLOCK)) { - regulator_unlock(rdev1); - goto exit; - } =20 - held =3D rdev1; - contended =3D rdev2; while (true) { - regulator_unlock(held); - - ww_mutex_lock_slow(&contended->mutex, ww_ctx); - contended->ref_cnt++; - contended->mutex_owner =3D current; - swap(held, contended); - ret =3D regulator_lock_nested(contended, ww_ctx); + ret =3D regulator_lock_nested(rdev2, ww_ctx); if (!ret) return 0; + + regulator_unlock(rdev1); + if (WARN_ON(ret !=3D -EDEADLOCK)) break; + + swap(rdev1, rdev2); + + ww_mutex_lock_slow(&rdev1->mutex, ww_ctx); + rdev1->ref_cnt++; + rdev1->mutex_owner =3D current; } =20 exit: --=20 2.39.2