1 From 2ca6b2767c36bc9ee62a79cb26cae7231b896c0f Mon Sep 17 00:00:00 2001
2 From: Sasha Levin <sashal@kernel.org>
3 Date: Thu, 4 Jun 2020 22:32:39 -0500
4 Subject: can: xilinx_can: handle failure cases of pm_runtime_get_sync
6 From: Navid Emamdoost <navid.emamdoost@gmail.com>
8 [ Upstream commit 79c43333bdd5a7026a5aab606b53053b643585e7 ]
10 Calling pm_runtime_get_sync increments the counter even in case of
11 failure, causing incorrect ref count. Call pm_runtime_put if
12 pm_runtime_get_sync fails.
14 Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
15 Link: https://lore.kernel.org/r/20200605033239.60664-1-navid.emamdoost@gmail.com
16 Fixes: 4716620d1b62 ("can: xilinx: Convert to runtime_pm")
17 Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
18 Signed-off-by: Sasha Levin <sashal@kernel.org>
20 drivers/net/can/xilinx_can.c | 6 +++---
21 1 file changed, 3 insertions(+), 3 deletions(-)
23 diff --git a/drivers/net/can/xilinx_can.c b/drivers/net/can/xilinx_can.c
24 index c1dbab8c896d5..748ff70f6a7bf 100644
25 --- a/drivers/net/can/xilinx_can.c
26 +++ b/drivers/net/can/xilinx_can.c
27 @@ -1391,7 +1391,7 @@ static int xcan_open(struct net_device *ndev)
29 netdev_err(ndev, "%s: pm_runtime_get failed(%d)\n",
35 ret = request_irq(ndev->irq, xcan_interrupt, priv->irq_flags,
36 @@ -1475,6 +1475,7 @@ static int xcan_get_berr_counter(const struct net_device *ndev,
38 netdev_err(ndev, "%s: pm_runtime_get failed(%d)\n",
40 + pm_runtime_put(priv->dev);
44 @@ -1789,7 +1790,7 @@ static int xcan_probe(struct platform_device *pdev)
46 netdev_err(ndev, "%s: pm_runtime_get failed(%d)\n",
49 + goto err_disableclks;
52 if (priv->read_reg(priv, XCAN_SR_OFFSET) != XCAN_SR_CONFIG_MASK) {
53 @@ -1824,7 +1825,6 @@ static int xcan_probe(struct platform_device *pdev)
56 pm_runtime_put(priv->dev);
58 pm_runtime_disable(&pdev->dev);