From patchwork Thu Mar 30 21:03:40 2023 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: 13194862 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 A45E1C77B62 for ; Thu, 30 Mar 2023 21:04:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229991AbjC3VEH (ORCPT ); Thu, 30 Mar 2023 17:04:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33750 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229995AbjC3VEF (ORCPT ); Thu, 30 Mar 2023 17:04:05 -0400 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 89A6310407 for ; Thu, 30 Mar 2023 14:04:02 -0700 (PDT) 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 1phzQw-00028o-Oi; Thu, 30 Mar 2023 23:03:46 +0200 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 1phzQv-007qTS-0G; Thu, 30 Mar 2023 23:03:45 +0200 Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1phzQt-009Hr9-KT; Thu, 30 Mar 2023 23:03:43 +0200 From: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= To: Andy Gross , Bjorn Andersson , Mark Brown Cc: Konrad Dybcio , linux-arm-msm@vger.kernel.org, linux-spi@vger.kernel.org, kernel@pengutronix.de Subject: [PATCH 1/2] spi: qup: Don't skip cleanup in remove's error path Date: Thu, 30 Mar 2023 23:03:40 +0200 Message-Id: <20230330210341.2459548-2-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230330210341.2459548-1-u.kleine-koenig@pengutronix.de> References: <20230330210341.2459548-1-u.kleine-koenig@pengutronix.de> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1666; i=u.kleine-koenig@pengutronix.de; h=from:subject; bh=6/vEy1Mo9ElX8APtQSvIdJqXun8Q9L13V7ppH8ExTZQ=; b=owEBbQGS/pANAwAKAY+A+1h9Ev5OAcsmYgBkJfkp2CelunJXQ6oDPGfyjkXW9I+7Twa5DCV2+ 5oBacxQ73qJATMEAAEKAB0WIQQ/gaxpOnoeWYmt/tOPgPtYfRL+TgUCZCX5KQAKCRCPgPtYfRL+ TiB9CACySh8cTwRzEmGCQZLaF1HziDmbSwUXoV2IdNAfXxuR4BwOh9xrUbwlMfn6Dxd9FqkV/N0 uowVHsD7Lk4djwS+G4ordUzfp2XFufhHJWZP7BLk3F3nrlnoEhFxrn9VfNgmG5cTJjNMlQvbF+C YVoF22SRC29f8HUpgLkFi4XaK0upOiKGkO/pIVbTASdF3uNvGu+9xghdsLcyonfuXiS0PuHPRVo xhLlvZQMu4iFC9Y3xncbZayfruCnUOYFbz8jfy4p5XogTDx8fLYBpNNcyrfQJVDKdNnmcdcNR/Q wAi4TtIu/I8oNlgKTsB5rx6Csb7ge+zXYksltiuY21/OlbIr 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-spi@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org Returning early in a platform driver's remove callback is wrong. In this case the dma resources are not released in the error path. this is never retried later and so this is a permanent leak. To fix this, only skip hardware disabling if waking the device fails. Fixes: 64ff247a978f ("spi: Add Qualcomm QUP SPI controller support") Signed-off-by: Uwe Kleine-König --- drivers/spi/spi-qup.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c index 678dc51ef017..205e54f157b4 100644 --- a/drivers/spi/spi-qup.c +++ b/drivers/spi/spi-qup.c @@ -1277,18 +1277,22 @@ static int spi_qup_remove(struct platform_device *pdev) struct spi_qup *controller = spi_master_get_devdata(master); int ret; - ret = pm_runtime_resume_and_get(&pdev->dev); - if (ret < 0) - return ret; + ret = pm_runtime_get_sync(&pdev->dev); - ret = spi_qup_set_state(controller, QUP_STATE_RESET); - if (ret) - return ret; + if (ret >= 0) { + ret = spi_qup_set_state(controller, QUP_STATE_RESET); + if (ret) + dev_warn(&pdev->dev, "failed to reset controller (%pe)\n", + ERR_PTR(ret)); - spi_qup_release_dma(master); + clk_disable_unprepare(controller->cclk); + clk_disable_unprepare(controller->iclk); + } else { + dev_warn(&pdev->dev, "failed to resume, skip hw disable (%pe)\n", + ERR_PTR(ret)); + } - clk_disable_unprepare(controller->cclk); - clk_disable_unprepare(controller->iclk); + spi_qup_release_dma(master); pm_runtime_put_noidle(&pdev->dev); pm_runtime_disable(&pdev->dev); From patchwork Thu Mar 30 21:03:41 2023 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: 13194864 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 87111C7619A for ; Thu, 30 Mar 2023 21:04:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230012AbjC3VEG (ORCPT ); Thu, 30 Mar 2023 17:04:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33738 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229827AbjC3VEE (ORCPT ); Thu, 30 Mar 2023 17:04:04 -0400 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 05EA3E396 for ; Thu, 30 Mar 2023 14:04:02 -0700 (PDT) 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 1phzQw-00028k-Oi; Thu, 30 Mar 2023 23:03:46 +0200 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 1phzQu-007qTM-Fc; Thu, 30 Mar 2023 23:03:44 +0200 Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1phzQt-009HrC-R7; Thu, 30 Mar 2023 23:03:43 +0200 From: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= To: Andy Gross , Bjorn Andersson , Mark Brown Cc: Konrad Dybcio , linux-arm-msm@vger.kernel.org, linux-spi@vger.kernel.org, kernel@pengutronix.de Subject: [PATCH 2/2] spi: qup.c: Convert to platform remove callback returning void Date: Thu, 30 Mar 2023 23:03:41 +0200 Message-Id: <20230330210341.2459548-3-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230330210341.2459548-1-u.kleine-koenig@pengutronix.de> References: <20230330210341.2459548-1-u.kleine-koenig@pengutronix.de> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1743; i=u.kleine-koenig@pengutronix.de; h=from:subject; bh=4ORL/RE427evmh2kg1ELKEpHyPJUuSu3AoBaMjDdcSc=; b=owEBbQGS/pANAwAKAY+A+1h9Ev5OAcsmYgBkJfkq5c26xYNivbAWrdqVOkoPNDWiLyAo9vwpq lLCxtItF9CJATMEAAEKAB0WIQQ/gaxpOnoeWYmt/tOPgPtYfRL+TgUCZCX5KgAKCRCPgPtYfRL+ Tr6ICACnpC2pTlrIoNeVVpYgETvvSiYyw2MJXkan4yp5ru2NiWK4JVyeRYCp3KOEX0FNCoDWP9D f5w1JWRh+QSJlGnfNjOIkz3y0tRWrA8LGmGdLrxP4jGaoXQ+82yJbDOqtCpAgs5KjsZGXBvqf3C F+p/WqQaxqp9zYAQg4/tIRbdb2qU96qQqk+jkTZUiPIqs0Gzn7OEdjIZZYAw93J8MbRwmyuqsD6 nv44IoRt6kOyHYt5QCnQ+2g+5sX1Frx+jXiVt5CB5MtrI9/KmshVFbuKJfpYomkGMQUcJOQ+6ae uWrxNpPd5d9Il6Qe1g5ORl0fE6Xidb+OR1tNIkI5CEwCMOTf 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-spi@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org The .remove() callback for a platform driver returns an int which makes many driver authors wrongly assume it's possible to do error handling by returning an error code. However the value returned is (mostly) ignored and this typically results in resource leaks. To improve here there is a quest to make the remove callback return void. In the first step of this quest all drivers are converted to .remove_new() which already returns void. Trivially convert this driver from always returning zero in the remove callback to the void returning variant. Signed-off-by: Uwe Kleine-König --- drivers/spi/spi-qup.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c index 205e54f157b4..0b97c8a9372f 100644 --- a/drivers/spi/spi-qup.c +++ b/drivers/spi/spi-qup.c @@ -1271,7 +1271,7 @@ static int spi_qup_resume(struct device *device) } #endif /* CONFIG_PM_SLEEP */ -static int spi_qup_remove(struct platform_device *pdev) +static void spi_qup_remove(struct platform_device *pdev) { struct spi_master *master = dev_get_drvdata(&pdev->dev); struct spi_qup *controller = spi_master_get_devdata(master); @@ -1296,8 +1296,6 @@ static int spi_qup_remove(struct platform_device *pdev) pm_runtime_put_noidle(&pdev->dev); pm_runtime_disable(&pdev->dev); - - return 0; } static const struct of_device_id spi_qup_dt_match[] = { @@ -1322,7 +1320,7 @@ static struct platform_driver spi_qup_driver = { .of_match_table = spi_qup_dt_match, }, .probe = spi_qup_probe, - .remove = spi_qup_remove, + .remove_new = spi_qup_remove, }; module_platform_driver(spi_qup_driver);