Lines Matching refs:ldev

12 static bool __mlx5_lag_is_multipath(struct mlx5_lag *ldev)
14 return ldev->mode == MLX5_LAG_MODE_MULTIPATH;
18 static bool mlx5_lag_multipath_check_prereq(struct mlx5_lag *ldev)
20 if (!mlx5_lag_is_ready(ldev))
23 if (__mlx5_lag_is_active(ldev) && !__mlx5_lag_is_multipath(ldev))
26 if (ldev->ports > MLX5_LAG_MULTIPATH_OFFLOADS_SUPPORTED_PORTS)
29 return mlx5_esw_multipath_prereq(ldev->pf[MLX5_LAG_P1].dev,
30 ldev->pf[MLX5_LAG_P2].dev);
35 struct mlx5_lag *ldev = mlx5_lag_dev(dev);
37 return ldev && __mlx5_lag_is_multipath(ldev);
43 * @ldev: lag device
50 static void mlx5_lag_set_port_affinity(struct mlx5_lag *ldev,
55 if (!__mlx5_lag_is_multipath(ldev))
78 mlx5_core_warn(ldev->pf[MLX5_LAG_P1].dev,
84 mlx5_notifier_call_chain(ldev->pf[MLX5_LAG_P1].dev->priv.events,
89 mlx5_notifier_call_chain(ldev->pf[MLX5_LAG_P2].dev->priv.events,
93 mlx5_modify_lag(ldev, &tracker);
113 struct mlx5_lag *ldev;
122 mlx5_lag_get_next_fib_dev(struct mlx5_lag *ldev,
142 ldev_idx = mlx5_lag_dev_get_netdev_idx(ldev, fib_dev);
144 return ldev->pf[ldev_idx].netdev;
150 static void mlx5_lag_fib_route_event(struct mlx5_lag *ldev, unsigned long event,
155 struct lag_mp *mp = &ldev->lag_mp;
171 nh_dev0 = mlx5_lag_get_next_fib_dev(ldev, fi, NULL);
172 nh_dev1 = mlx5_lag_get_next_fib_dev(ldev, fi, nh_dev0);
182 mlx5_core_warn(ldev->pf[MLX5_LAG_P1].dev,
188 if (__mlx5_lag_is_active(ldev)) {
189 int i = mlx5_lag_dev_get_netdev_idx(ldev, nh_dev0);
192 mlx5_lag_set_port_affinity(ldev, i);
200 if (!mp->fib.mfi && !__mlx5_lag_is_active(ldev)) {
203 tracker = ldev->tracker;
204 mlx5_activate_lag(ldev, &tracker, MLX5_LAG_MODE_MULTIPATH, false);
207 mlx5_lag_set_port_affinity(ldev, MLX5_LAG_NORMAL_AFFINITY);
211 static void mlx5_lag_fib_nexthop_event(struct mlx5_lag *ldev,
216 struct lag_mp *mp = &ldev->lag_mp;
224 int i = mlx5_lag_dev_get_netdev_idx(ldev, fib_nh->fib_nh_dev);
228 mlx5_lag_set_port_affinity(ldev, i);
232 mlx5_lag_set_port_affinity(ldev, MLX5_LAG_NORMAL_AFFINITY);
240 struct mlx5_lag *ldev = fib_work->ldev;
248 mlx5_lag_fib_route_event(ldev, fib_work->event,
255 mlx5_lag_fib_nexthop_event(ldev,
268 mlx5_lag_init_fib_work(struct mlx5_lag *ldev, unsigned long event)
277 fib_work->ldev = ldev;
288 struct mlx5_lag *ldev = container_of(mp, struct mlx5_lag, lag_mp);
298 if (!mlx5_lag_multipath_check_prereq(ldev))
310 fib_work = mlx5_lag_init_fib_work(ldev, event);
323 fib_work = mlx5_lag_init_fib_work(ldev, event);
338 void mlx5_lag_mp_reset(struct mlx5_lag *ldev)
343 ldev->lag_mp.fib.mfi = NULL;
346 int mlx5_lag_mp_init(struct mlx5_lag *ldev)
348 struct lag_mp *mp = &ldev->lag_mp;
374 void mlx5_lag_mp_cleanup(struct mlx5_lag *ldev)
376 struct lag_mp *mp = &ldev->lag_mp;