On 08/30/2017 10:53 PM, Bhadram Varka wrote: > Hi, > > > > I have observed that carrier_changes is one even in case of the ethernet > link is up. > > > > After investigating the code below is my observation – > > > > ethernet_driver_probe() > > +--->phy_connect() > > | +--->phy_attach_direct() > > | +---> netif_carrier_off() : which increments > carrier_changes to one. > > +--->register_netdevice() : will the carrier_changes becomes zero here ? > > +--->netif_carrier_off(): not increment the carrier_changes since > __LINK_STATE_NOCARRIER already set. > > > > From ethernet driver open will start the PHY and trigger the > phy_state_machine. > > Phy_state_machine workqueue calling netif_carrier_on() once the link is UP. > > netif_carrier_on() increments the carrier_changes by one.
If the call trace is correct, then there is at least two problems here: - phy_connect() does start the PHY machine which means that as soon as it detects a link state of any kind (up or down) it can call netif_carrier_off() respectively netif_carrier_on() - as soon as you call register_netdevice() notifiers run and other parts of the kernel or user-space programs can see an inconsistent link state I would suggest doing the following sequence instead: netif_carrier_off() register_netdevice() phy_connect() Which should result in a consistent link state and carrier value. > > > > After link is UP if we check the carrier_changes sysfs node - it will be > one only. > > > > $ cat /sys/class/net/eth0/carrier_changes > > 1 > > > > After reverting the change - https://lkml.org/lkml/2016/1/9/173 (net: > phy: turn carrier off on phy attach) then I could see the carrier > changes incremented to 2 after Link UP. > > $ cat /sys/class/net/eth0/carrier_changes > > 2 > > > > Thanks, > > Bhadram. > > ------------------------------------------------------------------------ > This email message is for the sole use of the intended recipient(s) and > may contain confidential information. Any unauthorized review, use, > disclosure or distribution is prohibited. If you are not the intended > recipient, please contact the sender by reply email and destroy all > copies of the original message. > ------------------------------------------------------------------------ -- Florian