Lines Matching refs:lag

22 static void ice_lag_set_primary(struct ice_lag *lag)  in ice_lag_set_primary()  argument
24 struct ice_pf *pf = lag->pf; in ice_lag_set_primary()
29 if (lag->role != ICE_LAG_UNSET && lag->role != ICE_LAG_BACKUP) { in ice_lag_set_primary()
31 netdev_name(lag->netdev)); in ice_lag_set_primary()
35 lag->role = ICE_LAG_PRIMARY; in ice_lag_set_primary()
42 static void ice_lag_set_backup(struct ice_lag *lag) in ice_lag_set_backup() argument
44 struct ice_pf *pf = lag->pf; in ice_lag_set_backup()
49 if (lag->role != ICE_LAG_UNSET && lag->role != ICE_LAG_PRIMARY) { in ice_lag_set_backup()
51 netdev_name(lag->netdev)); in ice_lag_set_backup()
55 lag->role = ICE_LAG_BACKUP; in ice_lag_set_backup()
62 static void ice_display_lag_info(struct ice_lag *lag) in ice_display_lag_info() argument
65 struct device *dev = &lag->pf->pdev->dev; in ice_display_lag_info()
67 name = lag->netdev ? netdev_name(lag->netdev) : "unset"; in ice_display_lag_info()
68 peer = lag->peer_netdev ? netdev_name(lag->peer_netdev) : "unset"; in ice_display_lag_info()
69 upper = lag->upper_netdev ? netdev_name(lag->upper_netdev) : "unset"; in ice_display_lag_info()
70 master = lag->master ? "TRUE" : "FALSE"; in ice_display_lag_info()
71 bonded = lag->bonded ? "BONDED" : "UNBONDED"; in ice_display_lag_info()
73 switch (lag->role) { in ice_display_lag_info()
101 static void ice_lag_info_event(struct ice_lag *lag, void *ptr) in ice_lag_info_event() argument
110 lag_netdev_name = netdev_name(lag->netdev); in ice_lag_info_event()
113 if (event_netdev != lag->netdev || !lag->bonded || !lag->upper_netdev) in ice_lag_info_event()
117 netdev_dbg(lag->netdev, "Bonding event recv, but mode not active/backup\n"); in ice_lag_info_event()
122 netdev_dbg(lag->netdev, "Bonding event recv, but slave info not for us\n"); in ice_lag_info_event()
127 ice_lag_set_backup(lag); in ice_lag_info_event()
129 ice_lag_set_primary(lag); in ice_lag_info_event()
132 ice_display_lag_info(lag); in ice_lag_info_event()
141 ice_lag_link(struct ice_lag *lag, struct netdev_notifier_changeupper_info *info) in ice_lag_link() argument
144 struct ice_pf *pf = lag->pf; in ice_lag_link()
147 if (lag->bonded) in ice_lag_link()
149 netdev_name(lag->netdev)); in ice_lag_link()
156 if (lag->upper_netdev != upper) { in ice_lag_link()
158 lag->upper_netdev = upper; in ice_lag_link()
164 lag->bonded = true; in ice_lag_link()
165 lag->role = ICE_LAG_UNSET; in ice_lag_link()
168 lag->master = !!(peers == 1); in ice_lag_link()
177 ice_lag_unlink(struct ice_lag *lag, in ice_lag_unlink() argument
181 struct ice_pf *pf = lag->pf; in ice_lag_unlink()
184 if (!lag->bonded) { in ice_lag_unlink()
185 netdev_dbg(lag->netdev, "bonding unlink event on non-LAG netdev\n"); in ice_lag_unlink()
192 if (netdev_tmp == lag->netdev) { in ice_lag_unlink()
202 if (lag->upper_netdev) { in ice_lag_unlink()
203 dev_put(lag->upper_netdev); in ice_lag_unlink()
204 lag->upper_netdev = NULL; in ice_lag_unlink()
207 if (lag->peer_netdev) { in ice_lag_unlink()
208 dev_put(lag->peer_netdev); in ice_lag_unlink()
209 lag->peer_netdev = NULL; in ice_lag_unlink()
214 lag->bonded = false; in ice_lag_unlink()
215 lag->role = ICE_LAG_NONE; in ice_lag_unlink()
225 static void ice_lag_changeupper_event(struct ice_lag *lag, void *ptr) in ice_lag_changeupper_event() argument
234 if (netdev != lag->netdev) in ice_lag_changeupper_event()
250 ice_lag_link(lag, info); in ice_lag_changeupper_event()
252 ice_lag_unlink(lag, info); in ice_lag_changeupper_event()
254 ice_display_lag_info(lag); in ice_lag_changeupper_event()
264 static void ice_lag_changelower_event(struct ice_lag *lag, void *ptr) in ice_lag_changelower_event() argument
268 if (netdev != lag->netdev) in ice_lag_changelower_event()
288 struct ice_lag *lag; in ice_lag_event_handler() local
290 lag = container_of(notif_blk, struct ice_lag, notif_block); in ice_lag_event_handler()
292 if (!lag->netdev) in ice_lag_event_handler()
301 ice_lag_changeupper_event(lag, ptr); in ice_lag_event_handler()
304 ice_lag_changelower_event(lag, ptr); in ice_lag_event_handler()
307 ice_lag_info_event(lag, ptr); in ice_lag_event_handler()
310 ice_lag_unlink(lag, ptr); in ice_lag_event_handler()
323 static int ice_register_lag_handler(struct ice_lag *lag) in ice_register_lag_handler() argument
325 struct device *dev = ice_pf_to_dev(lag->pf); in ice_register_lag_handler()
328 notif_blk = &lag->notif_block; in ice_register_lag_handler()
346 static void ice_unregister_lag_handler(struct ice_lag *lag) in ice_unregister_lag_handler() argument
348 struct device *dev = ice_pf_to_dev(lag->pf); in ice_unregister_lag_handler()
351 notif_blk = &lag->notif_block; in ice_unregister_lag_handler()
368 struct ice_lag *lag; in ice_init_lag() local
372 pf->lag = kzalloc(sizeof(*lag), GFP_KERNEL); in ice_init_lag()
373 if (!pf->lag) in ice_init_lag()
375 lag = pf->lag; in ice_init_lag()
384 lag->pf = pf; in ice_init_lag()
385 lag->netdev = vsi->netdev; in ice_init_lag()
386 lag->role = ICE_LAG_NONE; in ice_init_lag()
387 lag->bonded = false; in ice_init_lag()
388 lag->peer_netdev = NULL; in ice_init_lag()
389 lag->upper_netdev = NULL; in ice_init_lag()
390 lag->notif_block.notifier_call = NULL; in ice_init_lag()
392 err = ice_register_lag_handler(lag); in ice_init_lag()
398 ice_display_lag_info(lag); in ice_init_lag()
404 kfree(lag); in ice_init_lag()
405 pf->lag = NULL; in ice_init_lag()
418 struct ice_lag *lag; in ice_deinit_lag() local
420 lag = pf->lag; in ice_deinit_lag()
422 if (!lag) in ice_deinit_lag()
425 if (lag->pf) in ice_deinit_lag()
426 ice_unregister_lag_handler(lag); in ice_deinit_lag()
428 if (lag->upper_netdev) in ice_deinit_lag()
429 dev_put(lag->upper_netdev); in ice_deinit_lag()
431 if (lag->peer_netdev) in ice_deinit_lag()
432 dev_put(lag->peer_netdev); in ice_deinit_lag()
434 kfree(lag); in ice_deinit_lag()
436 pf->lag = NULL; in ice_deinit_lag()