Received: by 2002:a05:7412:1703:b0:e2:908c:2ebd with SMTP id dm3csp4134968rdb; Wed, 30 Aug 2023 17:32:49 -0700 (PDT) X-Google-Smtp-Source: AGHT+IES0msrKItoPd9WFQbrH+HE8TD+whpP9Ha3dkRuH8cJ8utlygmyF0o1OddKf4vDeVKUdb0a X-Received: by 2002:a17:906:538a:b0:99c:5623:a2f1 with SMTP id g10-20020a170906538a00b0099c5623a2f1mr2489207ejo.48.1693441969372; Wed, 30 Aug 2023 17:32:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693441969; cv=none; d=google.com; s=arc-20160816; b=TD7o3NyA9cLVgAFli4TFqZusehTzI/VTKDUBKs+LMT8BIEAh5HbYVTuoiq/jLCpL6h bItkudOE+xomVl3HK4YD9LWNzAsiXLnkgM7ZJXi4PynNFYAXd0aoa3ZWDDSQnGdp63go lCnX+cg06SCZvpyl9GpT+3hicFlNCim16bgGZ4Xr/3kxzWHGIZhwFPMI/N3rd0PlrGOJ cFgBmq7AYAdxPC8QDK6n/4GpAw5P+/Jr1BfErEfeo15a5Fg4HVnnLo+UYjtPVlkKu4pr 4ljHTqSYYKE7wkAwF1NY1RcW7dEM9vNv4FVO8v/a5NagGpUeGRlGljsBmNuEa1ebdv42 oH8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:content-transfer-encoding :mime-version:subject:references:in-reply-to:message-id:date :dkim-signature; bh=Vuqj7ERJyn6014SQYkkcZB2gSz6vWT0NM1gQ2ViIb+Y=; fh=dCMeQhR97l2PKOxfFgOamU7iPvAN0UiUonlfLq9uHxE=; b=OOHEOwX5MZjitwuLALuVvqZ1bJOvODs69OHa6lF8uM2XGCg4xN+Pp7OLdVD8sQaTgi j5UFHsvg/0vD1qPNguE44Bo19/XHA+cGLOJAua//UenNOaFN/FKzVkRdI29nBAx3YABU /FzP5+euig8F8SaHxXNG+UTPVsuKq6rHiLzt+KV/tTkkGXT4POrN4wf54iMeBQ34GPbw vNinqONkoSUC+nbPm1DCDWNdAsZHmo9JjhJvnie/zQlmCCoNVGiZhp+KVWKyIxreWdkE PIb/LnoMNUPPgcX5uLo7AIZBmJ5oSB5HQ4JjENyHn7HapdRAWyc1j62XMDOmlf6JXUli CdtA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rere.qmqm.pl header.s=1 header.b=V0rJTCM4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=rere.qmqm.pl Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id g24-20020a170906395800b009a5ce391397si180065eje.367.2023.08.30.17.32.13; Wed, 30 Aug 2023 17:32:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@rere.qmqm.pl header.s=1 header.b=V0rJTCM4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=rere.qmqm.pl Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240421AbjH3TBd (ORCPT + 99 others); Wed, 30 Aug 2023 15:01:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52142 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343954AbjH3Rfh (ORCPT ); Wed, 30 Aug 2023 13:35:37 -0400 Received: from rere.qmqm.pl (rere.qmqm.pl [91.227.64.183]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9551D1A3 for ; Wed, 30 Aug 2023 10:35:34 -0700 (PDT) Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 4RbWfF1KmZzgk; Wed, 30 Aug 2023 19:35:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1693416933; bh=FBO3C/ZT0gXV582lOwqaqYNAxfqDw70mVXC++i5rfZQ=; h=Date:In-Reply-To:References:Subject:From:To:Cc:From; b=V0rJTCM40625GgmDxlSvUOLWaZOLLW+/FF4+z4VjKTlAulr35h8dJbrJr5VbfoQn2 SLoU4Qsmqt8wWw/svk6m6PpYOepC8Eesrt9aHTJRPWJ7FM9YyyaQbLyF3vknwuGEyG 8/ex66OV96WAAsHj2PYDAE+NlFUXnc5LVNjFMtjh0TF5tPHtiVcnGBRQbL7utEB1rF Ly1Hv3S5evsQJWGbkTDjDwjHZJT+TPnxW5ceLDrFdJU5PcXjJRAAsaCJyYh9UjiCR9 MxUF5FQEMTmZVLIbS6sXAt2PDa2x5Jw1T8+sABN0kFdLvwm0lFSP+uqgDZmq3SVcCJ 6EojIry0utvsg== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.8 at mail Date: Wed, 30 Aug 2023 19:35:32 +0200 Message-Id: <85bcd0af56521209f40e76e0cac626c4f02b7df5.1693416477.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: Subject: [PATCH v2 5/7] regulator/core: regulator_lock_contended: wrap ww_mutex lock sequence restart MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= To: Liam Girdwood , Mark Brown Cc: Douglas Anderson , linux-kernel@vger.kernel.org, Stephen Boyd X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Wrap locking a regulator after a failed ww_mutex locking sequence with a new function. This is to deduplicate occurrences of the pattern and make it self-documenting. Signed-off-by: Michał Mirosław --- drivers/regulator/core.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index e89c12d27a9d..7201927c5d5b 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -154,6 +154,22 @@ static inline int regulator_lock_nested(struct regulator_dev *rdev, return 0; } +/** + * regulator_lock_contended - retry locking a regulator + * @rdev: regulator source + * @ww_ctx: w/w mutex acquire context + * + * Locks a regulator after a failed locking sequence (aborted + * with -EDEADLK). + */ +static inline void regulator_lock_contended(struct regulator_dev *rdev, + struct ww_acquire_ctx *ww_ctx) +{ + ww_mutex_lock_slow(&rdev->mutex, ww_ctx); + rdev->ref_cnt++; + rdev->mutex_owner = current; +} + /** * regulator_lock - lock a single regulator * @rdev: regulator source @@ -218,9 +234,7 @@ static void regulator_lock_two(struct regulator_dev *rdev1, while (true) { regulator_unlock(held); - ww_mutex_lock_slow(&contended->mutex, ww_ctx); - contended->ref_cnt++; - contended->mutex_owner = current; + regulator_lock_contended(contended, ww_ctx); swap(held, contended); ret = regulator_lock_nested(contended, ww_ctx); @@ -376,10 +390,8 @@ static void regulator_lock_dependent(struct regulator_dev *rdev, do { if (new_contended_rdev) { - ww_mutex_lock_slow(&new_contended_rdev->mutex, ww_ctx); + regulator_lock_contended(new_contended_rdev, ww_ctx); old_contended_rdev = new_contended_rdev; - old_contended_rdev->ref_cnt++; - old_contended_rdev->mutex_owner = current; } err = regulator_lock_recursive(rdev, @@ -6085,10 +6097,8 @@ static void regulator_summary_lock(struct ww_acquire_ctx *ww_ctx) do { if (new_contended_rdev) { - ww_mutex_lock_slow(&new_contended_rdev->mutex, ww_ctx); + regulator_lock_contended(new_contended_rdev, ww_ctx); old_contended_rdev = new_contended_rdev; - old_contended_rdev->ref_cnt++; - old_contended_rdev->mutex_owner = current; } err = regulator_summary_lock_all(ww_ctx, -- 2.39.2