[PATCH] driver: net: can: delete napi if register_candev fails

Subsystems: can network drivers, the rest, xilinx can driver

STALE1785d

5 messages, 2 authors, 2021-10-17 · open the first message on its own page

[PATCH] driver: net: can: delete napi if register_candev fails

From: Dongliang Mu <hidden>
Date: 2021-10-13 04:04:09

If register_candev fails, xcan_probe does not clean the napi
created by netif_napi_add.

Fix this by adding error handling code to clean napi when
register_candev fails.

Signed-off-by: Dongliang Mu <redacted>
---
 drivers/net/can/xilinx_can.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/xilinx_can.c b/drivers/net/can/xilinx_can.c
index 3b883e607d8b..6ee0b5a8cdfc 100644
--- a/drivers/net/can/xilinx_can.c
+++ b/drivers/net/can/xilinx_can.c
@@ -1807,7 +1807,7 @@ static int xcan_probe(struct platform_device *pdev)
 	ret = register_candev(ndev);
 	if (ret) {
 		dev_err(&pdev->dev, "fail to register failed (err=%d)\n", ret);
-		goto err_disableclks;
+		goto err_del_napi;
 	}
 
 	devm_can_led_init(ndev);
@@ -1825,6 +1825,8 @@ static int xcan_probe(struct platform_device *pdev)
 
 	return 0;
 
+err_del_napi:
+	netif_napi_del(&priv->napi);
 err_disableclks:
 	pm_runtime_put(priv->dev);
 	pm_runtime_disable(&pdev->dev);
-- 
2.25.1

Re: [PATCH] driver: net: can: delete napi if register_candev fails

From: Dongliang Mu <hidden>
Date: 2021-10-13 05:21:44

On Wed, Oct 13, 2021 at 12:04 PM Dongliang Mu [off-list ref] wrote:
If register_candev fails, xcan_probe does not clean the napi
created by netif_napi_add.
It seems the netif_napi_del operation is done in the free_candev
(free_netdev precisely).

list_for_each_entry_safe(p, n, &dev->napi_list, dev_list)
          netif_napi_del(p);

And list_add_rcu(&napi->dev_list, &dev->napi_list) is done in the
netif_napi_add.

Therefore, I suggest removing "netif_napi_del" operation in the
xcan_remove to match probe and remove function.
quoted hunk
Fix this by adding error handling code to clean napi when
register_candev fails.

Signed-off-by: Dongliang Mu <redacted>
---
 drivers/net/can/xilinx_can.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/xilinx_can.c b/drivers/net/can/xilinx_can.c
index 3b883e607d8b..6ee0b5a8cdfc 100644
--- a/drivers/net/can/xilinx_can.c
+++ b/drivers/net/can/xilinx_can.c
@@ -1807,7 +1807,7 @@ static int xcan_probe(struct platform_device *pdev)
        ret = register_candev(ndev);
        if (ret) {
                dev_err(&pdev->dev, "fail to register failed (err=%d)\n", ret);
-               goto err_disableclks;
+               goto err_del_napi;
        }

        devm_can_led_init(ndev);
@@ -1825,6 +1825,8 @@ static int xcan_probe(struct platform_device *pdev)

        return 0;

+err_del_napi:
+       netif_napi_del(&priv->napi);
 err_disableclks:
        pm_runtime_put(priv->dev);
        pm_runtime_disable(&pdev->dev);
--
2.25.1

Re: [PATCH] driver: net: can: delete napi if register_candev fails

From: Marc Kleine-Budde <mkl@pengutronix.de>
Date: 2021-10-17 12:36:40

On 13.10.2021 13:21:09, Dongliang Mu wrote:
On Wed, Oct 13, 2021 at 12:04 PM Dongliang Mu [off-list ref] wrote:
quoted
If register_candev fails, xcan_probe does not clean the napi
created by netif_napi_add.
It seems the netif_napi_del operation is done in the free_candev
(free_netdev precisely).

list_for_each_entry_safe(p, n, &dev->napi_list, dev_list)
          netif_napi_del(p);

And list_add_rcu(&napi->dev_list, &dev->napi_list) is done in the
netif_napi_add.

Therefore, I suggest removing "netif_napi_del" operation in the
xcan_remove to match probe and remove function.
Sounds reasonable, can you create a patch for this.

regards,
Marc

-- 
Pengutronix e.K.                 | Marc Kleine-Budde           |
Embedded Linux                   | https://www.pengutronix.de  |
Vertretung West/Dortmund         | Phone: +49-231-2826-924     |
Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-5555 |

Re: [PATCH] driver: net: can: delete napi if register_candev fails

From: Dongliang Mu <hidden>
Date: 2021-10-17 12:52:50

On Sun, Oct 17, 2021 at 8:36 PM Marc Kleine-Budde [off-list ref] wrote:
On 13.10.2021 13:21:09, Dongliang Mu wrote:
quoted
On Wed, Oct 13, 2021 at 12:04 PM Dongliang Mu [off-list ref] wrote:
quoted
If register_candev fails, xcan_probe does not clean the napi
created by netif_napi_add.
It seems the netif_napi_del operation is done in the free_candev
(free_netdev precisely).

list_for_each_entry_safe(p, n, &dev->napi_list, dev_list)
          netif_napi_del(p);

And list_add_rcu(&napi->dev_list, &dev->napi_list) is done in the
netif_napi_add.

Therefore, I suggest removing "netif_napi_del" operation in the
xcan_remove to match probe and remove function.
Sounds reasonable, can you create a patch for this.
I have submitted one patch - https://lkml.org/lkml/2021/10/17/181
regards,
Marc

--
Pengutronix e.K.                 | Marc Kleine-Budde           |
Embedded Linux                   | https://www.pengutronix.de  |
Vertretung West/Dortmund         | Phone: +49-231-2826-924     |
Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-5555 |

Re: [PATCH] driver: net: can: delete napi if register_candev fails

From: Marc Kleine-Budde <mkl@pengutronix.de>
Date: 2021-10-17 20:16:43

On 17.10.2021 20:52:14, Dongliang Mu wrote:
On Sun, Oct 17, 2021 at 8:36 PM Marc Kleine-Budde [off-list ref] wrote:
quoted
On 13.10.2021 13:21:09, Dongliang Mu wrote:
quoted
On Wed, Oct 13, 2021 at 12:04 PM Dongliang Mu [off-list ref] wrote:
quoted
If register_candev fails, xcan_probe does not clean the napi
created by netif_napi_add.
It seems the netif_napi_del operation is done in the free_candev
(free_netdev precisely).

list_for_each_entry_safe(p, n, &dev->napi_list, dev_list)
          netif_napi_del(p);

And list_add_rcu(&napi->dev_list, &dev->napi_list) is done in the
netif_napi_add.

Therefore, I suggest removing "netif_napi_del" operation in the
xcan_remove to match probe and remove function.
Sounds reasonable, can you create a patch for this.
I have submitted one patch - https://lkml.org/lkml/2021/10/17/181
Thanks for the patch.

Regards,
Marc

BTW: Do you know the new kernel.org mailing list archive available at
https://lore.kernel.org ?
You can reference a mail using its Message-ID, in you case it's:
https://lore.kernel.org/all/20211017125022.3100329-1-mudongliangabcd@gmail.com

-- 
Pengutronix e.K.                 | Marc Kleine-Budde           |
Embedded Linux                   | https://www.pengutronix.de  |
Vertretung West/Dortmund         | Phone: +49-231-2826-924     |
Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-5555 |
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help