On Thu, Jan 18, 2018 at 01:06:52AM +0100, Andrew Lunn wrote: > > What is the idea to have two separate counters? Can a delta between them > > be a bigger than 1? > > Yes, it can. > > These counters are incremented in netif_carrier_on() / > netif_carrier_off(). They are not always called in pairs and they can > be called multiple times for the same event. The phylib will call them > when it notices the PHY saying the link is down/up, and the MAC driver > sometimes also calls them.
We check the __LINK_STATE_NOCARRIER bit before changing these counters, so if we call netif_carrier_on() twice, the counter will be incrimented only by one, will it not? void netif_carrier_on(struct net_device *dev) if (test_and_clear_bit(__LINK_STATE_NOCARRIER, &dev->state)) { atomic_inc(&dev->carrier_changes); ... void netif_carrier_off(struct net_device *dev) if (!test_and_set_bit(__LINK_STATE_NOCARRIER, &dev->state)) { atomic_inc(&dev->carrier_changes); > > Andrew