This reverts commit cc20a4791641a1cbd1525695fac0d4725dd72509. register_netdev gets called after phylink_create which has no devm equivalent. phylink_destroy must be called after unregister_netdev and not before. Signed-off-by: Rosen Penev --- drivers/net/ethernet/atheros/ag71xx.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/atheros/ag71xx.c b/drivers/net/ethernet/atheros/ag71xx.c index cbc730c7cff2..f2f12642529e 100644 --- a/drivers/net/ethernet/atheros/ag71xx.c +++ b/drivers/net/ethernet/atheros/ag71xx.c @@ -1926,7 +1926,7 @@ static int ag71xx_probe(struct platform_device *pdev) return dev_err_probe(&pdev->dev, err, "failed to setup phylink"); - err = devm_register_netdev(&pdev->dev, ndev); + err = register_netdev(ndev); if (err) { netif_err(ag, probe, ndev, "unable to register net device\n"); return err; @@ -1939,6 +1939,17 @@ static int ag71xx_probe(struct platform_device *pdev) return 0; } +static void ag71xx_remove(struct platform_device *pdev) +{ + struct net_device *ndev = platform_get_drvdata(pdev); + + if (!ndev) + return; + + unregister_netdev(ndev); + platform_set_drvdata(pdev, NULL); +} + static const u32 ar71xx_fifo_ar7100[] = { 0x0fff0000, 0x00001fff, 0x00780fff, }; @@ -2024,6 +2035,7 @@ MODULE_DEVICE_TABLE(of, ag71xx_match); static struct platform_driver ag71xx_driver = { .probe = ag71xx_probe, + .remove_new = ag71xx_remove, .driver = { .name = "ag71xx", .of_match_table = ag71xx_match, -- 2.52.0