Re: [bug report] net: usb: lan78xx: refactor PHY init to separate detection and MAC configuration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, May 09, 2025 at 12:03:26PM +0300, Dan Carpenter wrote:
> Hello Oleksij Rempel,
> 
> Commit d39f339d2603 ("net: usb: lan78xx: refactor PHY init to
> separate detection and MAC configuration") from May 5, 2025
> (linux-next), leads to the following Smatch static checker warning:
> 
> 	drivers/net/usb/lan78xx.c:2842 lan78xx_phy_init()
> 	warn: missing unwind goto?
> 
> drivers/net/usb/lan78xx.c
>     2805 static int lan78xx_phy_init(struct lan78xx_net *dev)
>     2806 {
>     2807         __ETHTOOL_DECLARE_LINK_MODE_MASK(fc) = { 0, };
>     2808         int ret;
>     2809         u32 mii_adv;
>     2810         struct phy_device *phydev;
>     2811 
>     2812         phydev = lan78xx_get_phy(dev);
>     2813         if (IS_ERR(phydev))
>     2814                 return PTR_ERR(phydev);
>     2815 
>     2816         ret = lan78xx_mac_prepare_for_phy(dev);
>     2817         if (ret < 0)
>     2818                 goto free_phy;
>     2819 
>     2820         /* if phyirq is not set, use polling mode in phylib */
>     2821         if (dev->domain_data.phyirq > 0)
>     2822                 phydev->irq = dev->domain_data.phyirq;
>     2823         else
>     2824                 phydev->irq = PHY_POLL;
>     2825         netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq);
>     2826 
>     2827         /* set to AUTOMDIX */
>     2828         phydev->mdix = ETH_TP_MDI_AUTO;
>     2829 
>     2830         ret = phy_connect_direct(dev->net, phydev,
>     2831                                  lan78xx_link_status_change,
>     2832                                  dev->interface);
>     2833         if (ret) {
>     2834                 netdev_err(dev->net, "can't attach PHY to %s\n",
>     2835                            dev->mdiobus->id);
>     2836                 if (dev->chipid == ID_REV_CHIP_ID_7801_) {
>     2837                         if (phy_is_pseudo_fixed_link(phydev)) {
>     2838                                 fixed_phy_unregister(phydev);
>     2839                                 phy_device_free(phydev);
>     2840                         }
>     2841                 }
> 
> Why does this error path only cleanup for ID_REV_CHIP_ID_7801_ where the
> others do it unconditionally?

This chip-specific condition in the cleanup can be used, but it’s not
strictly necessary - none of the variants introduce regressions. The
non-conditional cleanup actually matches the logic already used in
lan78xx_disconnect(), where phy_is_pseudo_fixed_link() is checked
unconditionally.

That said, the purpose of this patch set is to prepare for migration to
phylink, where pseudo fixed links won’t be used at all. Due to the
10-patch limit, I’ve split the changes - the patch that removes pseudo
fixed-link support entirely will follow.

Nevertheless, I can send a cleanup patch that unconditionally jumps to
free_phy on phy_connect_direct() failure for consistency and clarity.
Should I?

Best Regards,
Oleksij
-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |




[Index of Archives]     [Kernel Development]     [Kernel Announce]     [Kernel Newbies]     [Linux Networking Development]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Device Mapper]

  Powered by Linux