1 From b5e82439a905b750ab50899c8635836f6d42facc 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 2be846ee627d1..0de39ebb35662 100644
25 --- a/drivers/net/can/xilinx_can.c
26 +++ b/drivers/net/can/xilinx_can.c
27 @@ -1384,7 +1384,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 @@ -1468,6 +1468,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 @@ -1783,7 +1784,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 @@ -1818,7 +1819,6 @@ static int xcan_probe(struct platform_device *pdev)
56 pm_runtime_put(priv->dev);
58 pm_runtime_disable(&pdev->dev);