On 05/26/2017 06:31 PM, woojung....@microchip.com wrote: >> >> Yes, that's a very valid point, how about we even do this: >> >> diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c >> index f84414b8f2ee..dc666ec13651 100644 >> --- a/drivers/net/phy/phy_device.c >> +++ b/drivers/net/phy/phy_device.c >> @@ -960,15 +960,21 @@ int phy_attach_direct(struct net_device *dev, >> struct phy_device *phydev, >> >> phydev->attached_dev = dev; >> dev->phydev = phydev; >> + >> + /* Some Ethernet drivers try to connect to a PHY device before >> + * calling register_netdevice() -> netdev_register_kobject() and >> + * does the dev->dev.kobj initialization. Here we only check for >> + * success which indicates that the network device kobject is >> + * ready. >> + */ >> err = sysfs_create_link(&phydev->mdio.dev.kobj, &dev->dev.kobj, >> "attached_dev"); >> - if (err) >> - goto error; >> - >> - err = sysfs_create_link(&dev->dev.kobj, &phydev->mdio.dev.kobj, >> - "phydev"); >> - if (err) >> - goto error; >> + if (!err) { >> + err = sysfs_create_link(&dev->dev.kobj, >> &phydev->mdio.dev.kobj, >> + "phydev"); >> + if (err) >> + goto error; >> + } >> >> phydev->dev_flags = flags; >> > Looks better and clean. > > How about sysfs_remove_link() in phy_detach()?
Good catch, I was able to reproduce the situation in which macb calls phy_connect_direct(), will submit a patch shortly. Thanks! -- Florian