Lines Matching refs:dev
36 static unsigned int default_operstate(const struct net_device *dev) in default_operstate() argument
38 if (netif_testing(dev)) in default_operstate()
44 if (!netif_carrier_ok(dev)) { in default_operstate()
51 if (dev->reg_state <= NETREG_REGISTERED) in default_operstate()
52 iflink = dev_get_iflink(dev); in default_operstate()
54 iflink = dev->ifindex; in default_operstate()
56 if (iflink == dev->ifindex) in default_operstate()
60 peer = __dev_get_by_index(dev_net(dev), iflink); in default_operstate()
68 if (netif_dormant(dev)) in default_operstate()
74 static void rfc2863_policy(struct net_device *dev) in rfc2863_policy() argument
76 unsigned int operstate = default_operstate(dev); in rfc2863_policy()
78 if (operstate == READ_ONCE(dev->operstate)) in rfc2863_policy()
81 switch(dev->link_mode) { in rfc2863_policy()
96 WRITE_ONCE(dev->operstate, operstate); in rfc2863_policy()
100 void linkwatch_init_dev(struct net_device *dev) in linkwatch_init_dev() argument
103 if (!netif_carrier_ok(dev) || netif_dormant(dev) || in linkwatch_init_dev()
104 netif_testing(dev)) in linkwatch_init_dev()
105 rfc2863_policy(dev); in linkwatch_init_dev()
109 static bool linkwatch_urgent_event(struct net_device *dev) in linkwatch_urgent_event() argument
111 if (!netif_running(dev)) in linkwatch_urgent_event()
114 if (dev->ifindex != dev_get_iflink(dev)) in linkwatch_urgent_event()
117 if (netif_is_lag_port(dev) || netif_is_lag_master(dev)) in linkwatch_urgent_event()
120 return netif_carrier_ok(dev) && qdisc_tx_changing(dev); in linkwatch_urgent_event()
124 static void linkwatch_add_event(struct net_device *dev) in linkwatch_add_event() argument
129 if (list_empty(&dev->link_watch_list)) { in linkwatch_add_event()
130 list_add_tail(&dev->link_watch_list, &lweventlist); in linkwatch_add_event()
131 netdev_hold(dev, &dev->linkwatch_dev_tracker, GFP_ATOMIC); in linkwatch_add_event()
166 static void linkwatch_do_dev(struct net_device *dev) in linkwatch_do_dev() argument
177 clear_bit(__LINK_STATE_LINKWATCH_PENDING, &dev->state); in linkwatch_do_dev()
179 rfc2863_policy(dev); in linkwatch_do_dev()
180 if (dev->flags & IFF_UP) { in linkwatch_do_dev()
181 if (netif_carrier_ok(dev)) in linkwatch_do_dev()
182 dev_activate(dev); in linkwatch_do_dev()
184 dev_deactivate(dev); in linkwatch_do_dev()
186 netif_state_change(dev); in linkwatch_do_dev()
191 __dev_put(dev); in linkwatch_do_dev()
228 struct net_device *dev; in __linkwatch_run_queue() local
230 dev = list_first_entry(&wrk, struct net_device, link_watch_list); in __linkwatch_run_queue()
231 list_del_init(&dev->link_watch_list); in __linkwatch_run_queue()
233 if (!netif_device_present(dev) || in __linkwatch_run_queue()
234 (urgent_only && !linkwatch_urgent_event(dev))) { in __linkwatch_run_queue()
235 list_add_tail(&dev->link_watch_list, &lweventlist); in __linkwatch_run_queue()
241 netdev_tracker_free(dev, &dev->linkwatch_dev_tracker); in __linkwatch_run_queue()
243 netdev_lock_ops(dev); in __linkwatch_run_queue()
244 linkwatch_do_dev(dev); in __linkwatch_run_queue()
245 netdev_unlock_ops(dev); in __linkwatch_run_queue()
258 static bool linkwatch_clean_dev(struct net_device *dev) in linkwatch_clean_dev() argument
264 if (!list_empty(&dev->link_watch_list)) { in linkwatch_clean_dev()
265 list_del_init(&dev->link_watch_list); in linkwatch_clean_dev()
270 netdev_tracker_free(dev, &dev->linkwatch_dev_tracker); in linkwatch_clean_dev()
277 void __linkwatch_sync_dev(struct net_device *dev) in __linkwatch_sync_dev() argument
279 netdev_ops_assert_locked(dev); in __linkwatch_sync_dev()
281 if (linkwatch_clean_dev(dev)) in __linkwatch_sync_dev()
282 linkwatch_do_dev(dev); in __linkwatch_sync_dev()
285 void linkwatch_sync_dev(struct net_device *dev) in linkwatch_sync_dev() argument
287 if (linkwatch_clean_dev(dev)) { in linkwatch_sync_dev()
288 netdev_lock_ops(dev); in linkwatch_sync_dev()
289 linkwatch_do_dev(dev); in linkwatch_sync_dev()
290 netdev_unlock_ops(dev); in linkwatch_sync_dev()
309 void linkwatch_fire_event(struct net_device *dev) in linkwatch_fire_event() argument
311 bool urgent = linkwatch_urgent_event(dev); in linkwatch_fire_event()
313 if (!test_and_set_bit(__LINK_STATE_LINKWATCH_PENDING, &dev->state)) { in linkwatch_fire_event()
314 linkwatch_add_event(dev); in linkwatch_fire_event()