From nobody Wed Dec 17 14:19:44 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 DF209EE49A3 for ; Sun, 20 Aug 2023 00:27:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229521AbjHTA1G (ORCPT ); Sat, 19 Aug 2023 20:27:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32840 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229758AbjHTA0p (ORCPT ); Sat, 19 Aug 2023 20:26:45 -0400 Received: from rere.qmqm.pl (rere.qmqm.pl [91.227.64.183]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6FACFD36EB for ; Sat, 19 Aug 2023 15:46:10 -0700 (PDT) Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 4RSv3h4ZzdzDP; Sun, 20 Aug 2023 00:46:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1692485168; bh=cb3x8n2KvdEKrO5gnhlOylDSeakeIsSLrBnHc0wj/Xs=; h=Date:In-Reply-To:References:Subject:From:To:Cc:From; b=SYEFXf2h02SBxxE/mu1xLvA0/X+feaAQqA7UBg0b1om6HixQ+Bwivq7akoud2dkGI qktu0Mr5N6nTey+zjTCm6N2fNH8z0qK/IVMAtTkHKvakHzD52KLolR3hr6XW0Rljqm TUvHA05opmt5e6jUsz1Hv+s55XtMhHzrf4GjSPoKFEA//CMf/HRclC5C32fWrJBwjW GRouYo2Soh8S3qqNwI+tze89jR7cd0yxa3fYnDKxmERWjld5/dTrkm8B3aF8orhEFA oFurvUib4DM2JTwDEVcyA1UJkHgf8Z/Dh8V8/2S5g6riMxL963Y/25cfMYw01q5uU1 ez+eCjDRQD4Ew== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.8 at mail Date: Sun, 20 Aug 2023 00:46:08 +0200 Message-Id: <0e37d1f09718a6ab9204b367ff528ab02df25ac7.1692484240.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: Subject: [PATCH 1/6] regulator: core: simplify regulator_lock_nested() 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 `lock` is only false when the `rdev` is already locked and the owner is `current`. In this case `ret` is always zero. By removing `lock`, we thus remove `mutex_owner` write avoidance, but make the code flow more understandable. Signed-off-by: Micha=C5=82 Miros=C5=82aw Reviewed-by: Douglas Anderson --- drivers/regulator/core.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index d8e1caaf207e..215b721e5cd4 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -141,27 +141,19 @@ static bool regulator_ops_is_valid(struct regulator_d= ev *rdev, int ops) static inline int regulator_lock_nested(struct regulator_dev *rdev, struct ww_acquire_ctx *ww_ctx) { - bool lock =3D false; int ret =3D 0; =20 mutex_lock(®ulator_nesting_mutex); =20 if (!ww_mutex_trylock(&rdev->mutex, ww_ctx)) { - if (rdev->mutex_owner =3D=3D current) - rdev->ref_cnt++; - else - lock =3D true; - - if (lock) { + if (rdev->mutex_owner !=3D current) { mutex_unlock(®ulator_nesting_mutex); ret =3D ww_mutex_lock(&rdev->mutex, ww_ctx); mutex_lock(®ulator_nesting_mutex); } - } else { - lock =3D true; } =20 - if (lock && ret !=3D -EDEADLK) { + if (ret !=3D -EDEADLK) { rdev->ref_cnt++; rdev->mutex_owner =3D current; } --=20 2.39.2 From nobody Wed Dec 17 14:19:44 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 35616EE49AC for ; Sun, 20 Aug 2023 00:27:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229665AbjHTA1J (ORCPT ); Sat, 19 Aug 2023 20:27:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37020 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229759AbjHTA0p (ORCPT ); Sat, 19 Aug 2023 20:26:45 -0400 Received: from rere.qmqm.pl (rere.qmqm.pl [91.227.64.183]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D0717D36EC for ; Sat, 19 Aug 2023 15:46:10 -0700 (PDT) Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 4RSv3j0W9gzDk; Sun, 20 Aug 2023 00:46:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1692485169; bh=YtPxaSJGaYviQtheKr8WW3ztuiAMjl4/E99vF4LFKWg=; h=Date:In-Reply-To:References:Subject:From:To:Cc:From; b=ku31gmGanlGog1ZjXQr6SYu9WueRRIsD1NzauqoHufTQis/qn0JCdfzWR0i8Wp7XJ YHSgQRVFxG5YDZ+FCVAnNNnD3PXZdDecbW6HGDQNsxiORsetDxofS4Otev89qj/HQs qErD0TXfmzIzYZzhhwirsudamppTph6iw6GgM+0jAn31xValLy1zXzun6yL1cgWLJL 7jeDHKzs5AAZuREBHk+eka4f1QiBazD2ARb392gltkiERVFaFradTnFL/hKDEIVdgY Z3cgdhtu1MOKrYxrCASn30GqgSK2GnEjJylCx5xm26R+4asx1HNzLMkkW3i/GVj0Uc KBUCWB2p1bdWQ== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.8 at mail Date: Sun, 20 Aug 2023 00:46:08 +0200 Message-Id: <89a905854995cf662a122792d8d0c781e39ea7da.1692484240.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: Subject: [PATCH 2/6] regulator: core: skip nesting lock for -EDEADLK 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 When ww_mutex_lock() returns -EDEADLK the nesting mutex-protected section becomes a no-op. Return early and avoid the extra lock. Signed-off-by: Micha=C5=82 Miros=C5=82aw Reviewed-by: Douglas Anderson --- drivers/regulator/core.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 215b721e5cd4..921c7039baa3 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -145,18 +145,17 @@ static inline int regulator_lock_nested(struct regula= tor_dev *rdev, =20 mutex_lock(®ulator_nesting_mutex); =20 - if (!ww_mutex_trylock(&rdev->mutex, ww_ctx)) { - if (rdev->mutex_owner !=3D current) { - mutex_unlock(®ulator_nesting_mutex); - ret =3D ww_mutex_lock(&rdev->mutex, ww_ctx); - mutex_lock(®ulator_nesting_mutex); - } + if (!ww_mutex_trylock(&rdev->mutex, ww_ctx) && + rdev->mutex_owner !=3D current) { + mutex_unlock(®ulator_nesting_mutex); + ret =3D ww_mutex_lock(&rdev->mutex, ww_ctx); + if (ret =3D=3D -EDEADLK) + return ret; + mutex_lock(®ulator_nesting_mutex); } =20 - if (ret !=3D -EDEADLK) { - rdev->ref_cnt++; - rdev->mutex_owner =3D current; - } + rdev->ref_cnt++; + rdev->mutex_owner =3D current; =20 mutex_unlock(®ulator_nesting_mutex); =20 --=20 2.39.2 From nobody Wed Dec 17 14:19:44 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 025DEEE49A6 for ; Sun, 20 Aug 2023 00:29:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229553AbjHTA3O (ORCPT ); Sat, 19 Aug 2023 20:29:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36454 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229996AbjHTA2g (ORCPT ); Sat, 19 Aug 2023 20:28:36 -0400 Received: from rere.qmqm.pl (rere.qmqm.pl [91.227.64.183]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 79F292ECBF for ; Sat, 19 Aug 2023 15:46:11 -0700 (PDT) Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 4RSv3k0N0GzFj; Sun, 20 Aug 2023 00:46:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1692485170; bh=ivEhS7SaAFigkcVj/vEveFrLC/sIGv8BrZgnWeLjwMc=; h=Date:In-Reply-To:References:Subject:From:To:Cc:From; b=m+S9rGvEjyrtHywrt/fT7Kgn0bMSpoowE3emU/TSFq3mxeKtQO8vxq0whHJtmmiZD 4jZyg+i0GgrcN9qBvuGzIQSw2M/8IS8JSw4dwWKwW670vZfk3pfPxCzDJKW5U+KmhB 4Ze/3zeFRNpoIonv8Axj8HU4jkLloSf2q1VIlS43eq1wpHCwU2JaYBvTpzfMJfvPL2 qdTlRvfAt/skwW49FR+QhNwqCOUnr5maDeEgLxsGE+90y6DWSRhaMI9LVuMjmB9sLI 9hCqbQJw165/Eqkl84wqOO3OTdH9zbrEvOKaFoJrqAP7F2MexdZwApOSU3yX7gzSio lpEvp8x0goMpw== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.8 at mail Date: Sun, 20 Aug 2023 00:46:09 +0200 Message-Id: <7d678e7b55e88e630491086f59120253fabeb386.1692484240.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: Subject: [PATCH 3/6] regulator: core: simplify nested locking 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: Dmitry Osipenko , linux-kernel@vger.kernel.org, Douglas Anderson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Simplify regulator locking by removing locking around locking. rdev->ref check when unlocking is moved inside the critical section. This patch depends on 12235da8c80a ("kernel/locking: Add context to ww_mutex_trylock()"). Signed-off-by: Micha=C5=82 Miros=C5=82aw --- drivers/regulator/core.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 921c7039baa3..87e54b776a0f 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -34,7 +34,6 @@ #include "internal.h" =20 static DEFINE_WW_CLASS(regulator_ww_class); -static DEFINE_MUTEX(regulator_nesting_mutex); static DEFINE_MUTEX(regulator_list_mutex); static LIST_HEAD(regulator_map_list); static LIST_HEAD(regulator_ena_gpio_list); @@ -143,23 +142,18 @@ static inline int regulator_lock_nested(struct regula= tor_dev *rdev, { int ret =3D 0; =20 - mutex_lock(®ulator_nesting_mutex); - if (!ww_mutex_trylock(&rdev->mutex, ww_ctx) && - rdev->mutex_owner !=3D current) { - mutex_unlock(®ulator_nesting_mutex); + READ_ONCE(rdev->mutex_owner) !=3D current) { ret =3D ww_mutex_lock(&rdev->mutex, ww_ctx); + if (ret =3D=3D -EDEADLK) return ret; - mutex_lock(®ulator_nesting_mutex); } =20 rdev->ref_cnt++; rdev->mutex_owner =3D current; =20 - mutex_unlock(®ulator_nesting_mutex); - - return ret; + return 0; } =20 /** @@ -186,16 +180,13 @@ static void regulator_lock(struct regulator_dev *rdev) */ static void regulator_unlock(struct regulator_dev *rdev) { - mutex_lock(®ulator_nesting_mutex); + if (WARN_ON_ONCE(rdev->ref_cnt <=3D 0)) + return; =20 if (--rdev->ref_cnt =3D=3D 0) { rdev->mutex_owner =3D NULL; ww_mutex_unlock(&rdev->mutex); } - - WARN_ON_ONCE(rdev->ref_cnt < 0); - - mutex_unlock(®ulator_nesting_mutex); } =20 /** --=20 2.39.2 From nobody Wed Dec 17 14:19:44 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 9A7EAEE49A3 for ; Sun, 20 Aug 2023 02:33:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229782AbjHTCdd (ORCPT ); Sat, 19 Aug 2023 22:33:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55608 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229577AbjHTCdb (ORCPT ); Sat, 19 Aug 2023 22:33:31 -0400 Received: from rere.qmqm.pl (rere.qmqm.pl [91.227.64.183]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0F1DCD36ED for ; Sat, 19 Aug 2023 15:46:12 -0700 (PDT) Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 4RSv3k2fFyzK2; Sun, 20 Aug 2023 00:46:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1692485170; bh=DzbAdMU1wYIUdh1RzwXFx3KnrimKqCQ/g0WN0DovXFY=; h=Date:In-Reply-To:References:Subject:From:To:Cc:From; b=L9cAYUBDSJfCLdNseZgTZq0aRnoHObflbZSEUyJ762UQQKzOTC3UJbMbL48o89k28 tzB4F7YA78Thz/J1pJh0gSYKRx/vhBkoPYRQIEXe/XGeiwhkEBmBXuWsAhbbWy8bUO SrzUDH6kIRM2OeFZmaLTWlvxmMf9/L2i99+J6Ihx5NhPY0e45UcPgWDZtVtZOXJE1m j86Qq1Aonff5cz4CiMkqLpp41dQSzmbIE4uiqjdzFJEL3/kQc1E0uM5BZxjw85evXX EvFSVS2aEYK1y5U7QpwSx/RTiEgnatVloWc2anTewStx5n3liNzmUCiB6mNunxZQJI T6DOfImXjiXmQ== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.8 at mail Date: Sun, 20 Aug 2023 00:46:10 +0200 Message-Id: In-Reply-To: References: Subject: [PATCH 4/6] regulator: core: remove `goto`s from resolve_supply() 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 Since 14a71d509ac8 ("Fix lockdep warning resolving supplies") the `out` label is just `return ret;`. Inline it for easier reading. Signed-off-by: Micha=C5=82 Miros=C5=82aw Reviewed-by: Douglas Anderson --- drivers/regulator/core.c | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 87e54b776a0f..de434d550937 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -2053,11 +2053,9 @@ static int regulator_resolve_supply(struct regulator= _dev *rdev) =20 r =3D regulator_dev_lookup(dev, rdev->supply_name); if (IS_ERR(r)) { - ret =3D PTR_ERR(r); - /* Did the lookup explicitly defer for us? */ - if (ret =3D=3D -EPROBE_DEFER) - goto out; + if (PTR_ERR(r) =3D=3D -EPROBE_DEFER) + return -EPROBE_DEFER; =20 if (have_full_constraints()) { r =3D dummy_regulator_rdev; @@ -2065,18 +2063,15 @@ static int regulator_resolve_supply(struct regulato= r_dev *rdev) } else { dev_err(dev, "Failed to resolve %s-supply for %s\n", rdev->supply_name, rdev->desc->name); - ret =3D -EPROBE_DEFER; - goto out; + return -EPROBE_DEFER; } } =20 if (r =3D=3D rdev) { dev_err(dev, "Supply for %s (%s) resolved to itself\n", rdev->desc->name, rdev->supply_name); - if (!have_full_constraints()) { - ret =3D -EINVAL; - goto out; - } + if (!have_full_constraints()) + return -EINVAL; r =3D dummy_regulator_rdev; get_device(&r->dev); } @@ -2090,8 +2085,7 @@ static int regulator_resolve_supply(struct regulator_= dev *rdev) if (r->dev.parent && r->dev.parent !=3D rdev->dev.parent) { if (!device_is_bound(r->dev.parent)) { put_device(&r->dev); - ret =3D -EPROBE_DEFER; - goto out; + return -EPROBE_DEFER; } } =20 @@ -2099,7 +2093,7 @@ static int regulator_resolve_supply(struct regulator_= dev *rdev) ret =3D regulator_resolve_supply(r); if (ret < 0) { put_device(&r->dev); - goto out; + return ret; } =20 /* @@ -2113,14 +2107,14 @@ static int regulator_resolve_supply(struct regulato= r_dev *rdev) if (rdev->supply) { regulator_unlock_two(rdev, r, &ww_ctx); put_device(&r->dev); - goto out; + return 0; } =20 ret =3D set_supply(rdev, r); if (ret < 0) { regulator_unlock_two(rdev, r, &ww_ctx); put_device(&r->dev); - goto out; + return ret; } =20 regulator_unlock_two(rdev, r, &ww_ctx); @@ -2135,12 +2129,11 @@ static int regulator_resolve_supply(struct regulato= r_dev *rdev) if (ret < 0) { _regulator_put(rdev->supply); rdev->supply =3D NULL; - goto out; + return ret; } } =20 -out: - return ret; + return 0; } =20 /* Internal regulator request function */ --=20 2.39.2 From nobody Wed Dec 17 14:19:44 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 191AEEE49A6 for ; Sun, 20 Aug 2023 00:27:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229619AbjHTA1I (ORCPT ); Sat, 19 Aug 2023 20:27:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48884 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229761AbjHTA0p (ORCPT ); Sat, 19 Aug 2023 20:26:45 -0400 Received: from rere.qmqm.pl (rere.qmqm.pl [91.227.64.183]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 10076D36EE 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 4RSv3k6ZV8zSq; Sun, 20 Aug 2023 00:46:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1692485171; bh=vEG9KhS3zmUQyp3NQVv+xM+Ir0WQfV5ZhZ+DMgQzlEA=; h=Date:In-Reply-To:References:Subject:From:To:Cc:From; b=EM8Q2qh6Hp30VRCk4Po7ZQhtezB5k/zj8sMNsDUCqja59Wg9Vl5nmWD6Kv8cxe1q5 w9vgnpjfxfkvMDxn6GFX0XTYUDushkkm84dE5O8RcgapOjVlZs01sHjW+Pmsdwdj9G ECZH4/w/W1gb/LaN3BTwhIne5N76K23xm0hr34D8vx5HnVK2d100n+6Zy3ai3MTr2g uAge2reQNMyr636kaz1UgtatPrnMIXHs6n9X8/EYXpbZlKqnINf5/vlK8WrZzDISOM GeLNRn+e6MBwR4O9+Dgl8AkHbgyjtdSBwerR4fW3oAb0GWmcEj3DHPRqtLAxTE5tPd vvCBiuoTeswiA== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.8 at mail Date: Sun, 20 Aug 2023 00:46:10 +0200 Message-Id: In-Reply-To: References: Subject: [PATCH 5/6] regulator: core: propagate error out ouf regulator_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: Douglas Anderson , linux-kernel@vger.kernel.org, Dmitry Osipenko Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fix up error paths from regulator_lock_two(): although it should not fail, returning with half-locked state after issuing a WARN() asks for even more trouble. Fixes: cba6cfdc7c3f ("regulator: core: Avoid lockdep reports when resolving= supplies") Signed-off-by: Micha=C5=82 Miros=C5=82aw --- drivers/regulator/core.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index de434d550937..d8c2277cea36 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -197,9 +197,9 @@ static void regulator_unlock(struct regulator_dev *rdev) * * Locks both rdevs using the regulator_ww_class. */ -static void regulator_lock_two(struct regulator_dev *rdev1, - struct regulator_dev *rdev2, - struct ww_acquire_ctx *ww_ctx) +static int regulator_lock_two(struct regulator_dev *rdev1, + struct regulator_dev *rdev2, + struct ww_acquire_ctx *ww_ctx) { struct regulator_dev *held, *contended; int ret; @@ -208,10 +208,13 @@ static void regulator_lock_two(struct regulator_dev *= rdev1, =20 /* Try to just grab both of them */ ret =3D regulator_lock_nested(rdev1, ww_ctx); - WARN_ON(ret); + if (WARN_ON(ret)) + goto exit; ret =3D regulator_lock_nested(rdev2, ww_ctx); - if (ret !=3D -EDEADLOCK) { - WARN_ON(ret); + if (!ret) + return 0; + if (WARN_ON(ret !=3D -EDEADLOCK)) { + regulator_unlock(rdev1); goto exit; } =20 @@ -225,15 +228,15 @@ static void regulator_lock_two(struct regulator_dev *= rdev1, contended->mutex_owner =3D current; swap(held, contended); ret =3D regulator_lock_nested(contended, ww_ctx); - - if (ret !=3D -EDEADLOCK) { - WARN_ON(ret); + if (!ret) + return 0; + if (WARN_ON(ret !=3D -EDEADLOCK)) break; - } } =20 exit: ww_acquire_done(ww_ctx); + return ret; } =20 /** @@ -2101,7 +2104,11 @@ static int regulator_resolve_supply(struct regulator= _dev *rdev) * between rdev->supply null check and setting rdev->supply in * set_supply() from concurrent tasks. */ - regulator_lock_two(rdev, r, &ww_ctx); + ret =3D regulator_lock_two(rdev, r, &ww_ctx); + if (ret < 0) { + put_device(&r->dev); + return ret; + } =20 /* Supply just resolved by a concurrent task? */ if (rdev->supply) { --=20 2.39.2 From nobody Wed Dec 17 14:19:44 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