|
34 | 34 | #include <linux/mlx5/driver.h>
|
35 | 35 | #include <linux/mlx5/vport.h>
|
36 | 36 | #include "mlx5_core.h"
|
| 37 | +#include "eswitch.h" |
37 | 38 |
|
38 | 39 | enum {
|
39 | 40 | MLX5_LAG_FLAG_BONDED = 1 << 0,
|
@@ -257,40 +258,48 @@ static void mlx5_do_bond(struct mlx5_lag *ldev)
|
257 | 258 | {
|
258 | 259 | struct mlx5_core_dev *dev0 = ldev->pf[0].dev;
|
259 | 260 | struct mlx5_core_dev *dev1 = ldev->pf[1].dev;
|
| 261 | + bool do_bond, sriov_enabled; |
260 | 262 | struct lag_tracker tracker;
|
261 | 263 | int i;
|
262 |
| - bool do_bond; |
263 | 264 |
|
264 | 265 | if (!dev0 || !dev1)
|
265 | 266 | return;
|
266 | 267 |
|
| 268 | + sriov_enabled = mlx5_sriov_is_enabled(dev0) || mlx5_sriov_is_enabled(dev1); |
| 269 | + |
267 | 270 | mutex_lock(&lag_mutex);
|
268 | 271 | tracker = ldev->tracker;
|
269 | 272 | mutex_unlock(&lag_mutex);
|
270 | 273 |
|
271 | 274 | do_bond = tracker.is_bonded && ldev->allowed;
|
272 | 275 |
|
273 | 276 | if (do_bond && !mlx5_lag_is_bonded(ldev)) {
|
274 |
| - for (i = 0; i < MLX5_MAX_PORTS; i++) |
275 |
| - mlx5_remove_dev_by_protocol(ldev->pf[i].dev, |
276 |
| - MLX5_INTERFACE_PROTOCOL_IB); |
| 277 | + if (!sriov_enabled) |
| 278 | + for (i = 0; i < MLX5_MAX_PORTS; i++) |
| 279 | + mlx5_remove_dev_by_protocol(ldev->pf[i].dev, |
| 280 | + MLX5_INTERFACE_PROTOCOL_IB); |
277 | 281 |
|
278 | 282 | mlx5_activate_lag(ldev, &tracker);
|
279 | 283 |
|
280 |
| - mlx5_add_dev_by_protocol(dev0, MLX5_INTERFACE_PROTOCOL_IB); |
281 |
| - mlx5_nic_vport_enable_roce(dev1); |
| 284 | + if (!sriov_enabled) { |
| 285 | + mlx5_add_dev_by_protocol(dev0, MLX5_INTERFACE_PROTOCOL_IB); |
| 286 | + mlx5_nic_vport_enable_roce(dev1); |
| 287 | + } |
282 | 288 | } else if (do_bond && mlx5_lag_is_bonded(ldev)) {
|
283 | 289 | mlx5_modify_lag(ldev, &tracker);
|
284 | 290 | } else if (!do_bond && mlx5_lag_is_bonded(ldev)) {
|
285 |
| - mlx5_remove_dev_by_protocol(dev0, MLX5_INTERFACE_PROTOCOL_IB); |
286 |
| - mlx5_nic_vport_disable_roce(dev1); |
| 291 | + if (!sriov_enabled) { |
| 292 | + mlx5_remove_dev_by_protocol(dev0, MLX5_INTERFACE_PROTOCOL_IB); |
| 293 | + mlx5_nic_vport_disable_roce(dev1); |
| 294 | + } |
287 | 295 |
|
288 | 296 | mlx5_deactivate_lag(ldev);
|
289 | 297 |
|
290 |
| - for (i = 0; i < MLX5_MAX_PORTS; i++) |
291 |
| - if (ldev->pf[i].dev) |
292 |
| - mlx5_add_dev_by_protocol(ldev->pf[i].dev, |
293 |
| - MLX5_INTERFACE_PROTOCOL_IB); |
| 298 | + if (!sriov_enabled) |
| 299 | + for (i = 0; i < MLX5_MAX_PORTS; i++) |
| 300 | + if (ldev->pf[i].dev) |
| 301 | + mlx5_add_dev_by_protocol(ldev->pf[i].dev, |
| 302 | + MLX5_INTERFACE_PROTOCOL_IB); |
294 | 303 | }
|
295 | 304 | }
|
296 | 305 |
|
|
0 commit comments