Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'net-ucc_geth-devm-cleanups'

Rosen Penev says:

====================
net: ucc_geth: devm cleanups

Also added a small fix for NVMEM mac addresses.

This was tested as working on a Watchguard T10 device.
====================

Link: https://patch.msgid.link/20241104210127.307420-1-rosenp@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+14 -20
+14 -20
drivers/net/ethernet/freescale/ucc_geth.c
··· 3591 3591 if ((ucc_num < 0) || (ucc_num > 7)) 3592 3592 return -ENODEV; 3593 3593 3594 - ug_info = kmemdup(&ugeth_primary_info, sizeof(*ug_info), GFP_KERNEL); 3595 - if (ug_info == NULL) 3594 + ug_info = devm_kmemdup(&ofdev->dev, &ugeth_primary_info, 3595 + sizeof(*ug_info), GFP_KERNEL); 3596 + if (!ug_info) 3596 3597 return -ENOMEM; 3597 3598 3598 3599 ug_info->uf_info.ucc_num = ucc_num; 3599 3600 3600 3601 err = ucc_geth_parse_clock(np, "rx", &ug_info->uf_info.rx_clock); 3601 3602 if (err) 3602 - goto err_free_info; 3603 + return err; 3603 3604 err = ucc_geth_parse_clock(np, "tx", &ug_info->uf_info.tx_clock); 3604 3605 if (err) 3605 - goto err_free_info; 3606 + return err; 3606 3607 3607 3608 err = of_address_to_resource(np, 0, &res); 3608 3609 if (err) 3609 - goto err_free_info; 3610 + return err; 3610 3611 3611 3612 ug_info->uf_info.regs = res.start; 3612 3613 ug_info->uf_info.irq = irq_of_parse_and_map(np, 0); ··· 3620 3619 */ 3621 3620 err = of_phy_register_fixed_link(np); 3622 3621 if (err) 3623 - goto err_free_info; 3622 + return err; 3624 3623 ug_info->phy_node = of_node_get(np); 3625 3624 } 3626 3625 ··· 3688 3687 ug_info->uf_info.irq); 3689 3688 3690 3689 /* Create an ethernet device instance */ 3691 - dev = alloc_etherdev(sizeof(*ugeth)); 3692 - 3693 - if (dev == NULL) { 3690 + dev = devm_alloc_etherdev(&ofdev->dev, sizeof(*ugeth)); 3691 + if (!dev) { 3694 3692 err = -ENOMEM; 3695 3693 goto err_deregister_fixed_link; 3696 3694 } ··· 3724 3724 /* Carrier starts down, phylib will bring it up */ 3725 3725 netif_carrier_off(dev); 3726 3726 3727 - err = register_netdev(dev); 3727 + err = devm_register_netdev(&ofdev->dev, dev); 3728 3728 if (err) { 3729 3729 if (netif_msg_probe(ugeth)) 3730 3730 pr_err("%s: Cannot register net device, aborting\n", 3731 3731 dev->name); 3732 - goto err_free_netdev; 3732 + goto err_deregister_fixed_link; 3733 3733 } 3734 3734 3735 - of_get_ethdev_address(np, dev); 3735 + err = of_get_ethdev_address(np, dev); 3736 + if (err == -EPROBE_DEFER) 3737 + goto err_deregister_fixed_link; 3736 3738 3737 3739 ugeth->ug_info = ug_info; 3738 3740 ugeth->dev = device; ··· 3743 3741 3744 3742 return 0; 3745 3743 3746 - err_free_netdev: 3747 - free_netdev(dev); 3748 3744 err_deregister_fixed_link: 3749 3745 if (of_phy_is_fixed_link(np)) 3750 3746 of_phy_deregister_fixed_link(np); 3751 3747 of_node_put(ug_info->tbi_node); 3752 3748 of_node_put(ug_info->phy_node); 3753 - err_free_info: 3754 - kfree(ug_info); 3755 - 3756 3749 return err; 3757 3750 } 3758 3751 ··· 3757 3760 struct ucc_geth_private *ugeth = netdev_priv(dev); 3758 3761 struct device_node *np = ofdev->dev.of_node; 3759 3762 3760 - unregister_netdev(dev); 3761 3763 ucc_geth_memclean(ugeth); 3762 3764 if (of_phy_is_fixed_link(np)) 3763 3765 of_phy_deregister_fixed_link(np); 3764 3766 of_node_put(ugeth->ug_info->tbi_node); 3765 3767 of_node_put(ugeth->ug_info->phy_node); 3766 - kfree(ugeth->ug_info); 3767 - free_netdev(dev); 3768 3768 } 3769 3769 3770 3770 static const struct of_device_id ucc_geth_match[] = {