From patchwork Thu Nov 17 21:11:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= X-Patchwork-Id: 21927 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp627175wrr; Thu, 17 Nov 2022 13:18:29 -0800 (PST) X-Google-Smtp-Source: AA0mqf4d5duVQruRFIDTY9c/T/ETDspzMAzWlkjD6SHWar0Cu1I8btyLKwOxIfudul1YhIwtIWBl X-Received: by 2002:a17:906:a107:b0:77f:9082:73c7 with SMTP id t7-20020a170906a10700b0077f908273c7mr3506221ejy.517.1668719909453; Thu, 17 Nov 2022 13:18:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668719909; cv=none; d=google.com; s=arc-20160816; b=pjER3aJzQvQFNxfXl0vK9Lu3vokmD9kItw1gc2FNO68pm/Bw7F08l8G34ckLsnE+7v wSyEoCoGV/nXHbQn84W/ue67GVSSv4XjHAoUqriYmzjen+Njvj3VrAaIQoInBewRw3g3 391kJUc+JGe5532vV2HNCntid57b4IBlumo/b+vfGx6iTepnAkeGne9rsI/dO47TV37c D/S++JoV0/YDhhYfnbWuixekQj2lUEhoK+gGDxN6nGiL3PXamVrdCssS7cVrCeKO7bSL oYEfmqxUyrnXDZD4mCqqck6liC7+hlW5emjWxb5h5naCuiknAh6/UO4eiwTThGU4FXXt 1bog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=7iI3TEtuLXYEVHITOK+IZnagb5NR1KjnvnwaZoqknc4=; b=CavBNtnM3IC9LTBpPCY5IVrvnaNM/L9/76agVD2YoYZsjfab1VrUrtlPqG1GB/AeqO Ne3sh/i4MURIQCQjpmqGxPlbQKqUlPqSfaDme8MuxmiAC5cLnoSUfWj1/00TFvVfWFj2 yvNm42j+CGni8eM4yizGHV9kifXGW7I7qnxNu57DgMROwje13t9VEuG7m/0fhG/HJeI6 5AaXgnobTXGTACS+pogsS8cEtrLnO1lc9DgLtlhLAxGMTZZLdafyd5EobKrOkPtRVQxR CanFcbEuoKInQRkhNaJXwgnaV5OBV5W6a1Buqkd4RqFXTSY3jJjG6piG6NSHYXJpMt3Z 7Dwg== ARC-Authentication-Results: i=1; mx.google.com; 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 Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hc34-20020a17090716a200b007ae9f42f878si1714643ejc.354.2022.11.17.13.18.00; Thu, 17 Nov 2022 13:18:29 -0800 (PST) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240766AbiKQVML (ORCPT + 99 others); Thu, 17 Nov 2022 16:12:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56964 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240721AbiKQVL5 (ORCPT ); Thu, 17 Nov 2022 16:11:57 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 551C620182 for ; Thu, 17 Nov 2022 13:11:56 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ovmAp-0007Oo-Uf; Thu, 17 Nov 2022 22:11:51 +0100 Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1ovmAo-004v5p-80; Thu, 17 Nov 2022 22:11:51 +0100 Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1ovmAo-00HN0I-Km; Thu, 17 Nov 2022 22:11:50 +0100 From: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= To: Thierry Reding Cc: linux-pwm@vger.kernel.org, Andy Shevchenko , linux-kernel@vger.kernel.org, kernel@pengutronix.de Subject: [PATCH v2 2/4] pwm: Reduce time the pwm_lock mutex is held in pwmchip_add() Date: Thu, 17 Nov 2022 22:11:41 +0100 Message-Id: <20221117211143.3817381-3-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221117211143.3817381-1-u.kleine-koenig@pengutronix.de> References: <20221117211143.3817381-1-u.kleine-koenig@pengutronix.de> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1801; i=u.kleine-koenig@pengutronix.de; h=from:subject; bh=W5msw8zxagwiJj6hJi4SU67DWQ0AjhZfTFm/qYmXeAw=; b=owEBbQGS/pANAwAKAcH8FHityuwJAcsmYgBjdqOBYckSnoEgissL+BaN7xiZzh9ivhj1/pMXWrvx 7N8xgGaJATMEAAEKAB0WIQR+cioWkBis/z50pAvB/BR4rcrsCQUCY3ajgQAKCRDB/BR4rcrsCXo5B/ 0dktt/af+nBKYFHSIzUWzlrkfNaF39SwKZymqqNFesWnRgx5Bme1h08zFbNC/AiGiSHNoO0ZLUqWvD wSwuRbHHcanZJzaITHzqoKV1LB0HQP5+czqi39f1uyXmDd7zzNf7MVPsHU9KSBRv+VJeq1Nf2OCelT Dp5XHO6a1Eq/oLfVtkOu1Fejl47Hn9yUjFgjYDYcx9g4r8Fl11kzajFwA3A4/1hIXbe6qXg3U7n9QO atAsT6jYdTRua1p3eY7s/nsD6RbMruUuhkUMlYhlfwJ2b1ejYAgK83zp47LjivQN617DWai9oolwqz e+0PtbpKksP+vwSwf6Tu25N2pAWeyO X-Developer-Key: i=u.kleine-koenig@pengutronix.de; a=openpgp; fpr=0D2511F322BFAB1C1580266BE2DCDD9132669BD6 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ukl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749779648145500664?= X-GMAIL-MSGID: =?utf-8?q?1749779648145500664?= This simplifies error handling as the need for goto error handling goes away and at the end of the function the code can be simplified as this code isn't used in the error case any more. Now memory allocation and the call to of_pwmchip_add() are done without holding the lock. Both don't access the data structures protected by &pwm_lock. Reviewed-by: Andy Shevchenko Signed-off-by: Uwe Kleine-König --- drivers/pwm/core.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index ebe06efe9de5..2338119a09d8 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -272,20 +272,21 @@ int pwmchip_add(struct pwm_chip *chip) if (!pwm_ops_check(chip)) return -EINVAL; + chip->pwms = kcalloc(chip->npwm, sizeof(*pwm), GFP_KERNEL); + if (!chip->pwms) + return -ENOMEM; + mutex_lock(&pwm_lock); ret = alloc_pwms(chip->npwm); - if (ret < 0) - goto out; + if (ret < 0) { + mutex_unlock(&pwm_lock); + kfree(chip->pwms); + return ret; + } chip->base = ret; - chip->pwms = kcalloc(chip->npwm, sizeof(*pwm), GFP_KERNEL); - if (!chip->pwms) { - ret = -ENOMEM; - goto out; - } - for (i = 0; i < chip->npwm; i++) { pwm = &chip->pwms[i]; @@ -301,18 +302,14 @@ int pwmchip_add(struct pwm_chip *chip) INIT_LIST_HEAD(&chip->list); list_add(&chip->list, &pwm_chips); - ret = 0; + mutex_unlock(&pwm_lock); if (IS_ENABLED(CONFIG_OF)) of_pwmchip_add(chip); -out: - mutex_unlock(&pwm_lock); - - if (!ret) - pwmchip_sysfs_export(chip); + pwmchip_sysfs_export(chip); - return ret; + return 0; } EXPORT_SYMBOL_GPL(pwmchip_add);