Skip to content

Commit e1af35d

Browse files
author
Paolo Abeni
committed
Merge branch 'mlx5-misc-fixes-2025-03-10'
Tariq Toukan says: ==================== mlx5 misc fixes 2025-03-10 This patchset provides misc bug fixes from the team to the mlx5 core and Eth drivers. ==================== Link: https://patch.msgid.link/1741644104-97767-1-git-send-email-tariqt@nvidia.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2 parents 1063ae0 + e92df79 commit e1af35d

File tree

16 files changed

+108
-47
lines changed

16 files changed

+108
-47
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,10 @@ mlx5_esw_bridge_lag_rep_get(struct net_device *dev, struct mlx5_eswitch *esw)
4848
struct list_head *iter;
4949

5050
netdev_for_each_lower_dev(dev, lower, iter) {
51-
struct mlx5_core_dev *mdev;
52-
struct mlx5e_priv *priv;
53-
5451
if (!mlx5e_eswitch_rep(lower))
5552
continue;
5653

57-
priv = netdev_priv(lower);
58-
mdev = priv->mdev;
59-
if (mlx5_lag_is_shared_fdb(mdev) && mlx5_esw_bridge_dev_same_esw(lower, esw))
54+
if (mlx5_esw_bridge_dev_same_esw(lower, esw))
6055
return lower;
6156
}
6257

@@ -125,7 +120,7 @@ static bool mlx5_esw_bridge_is_local(struct net_device *dev, struct net_device *
125120
priv = netdev_priv(rep);
126121
mdev = priv->mdev;
127122
if (netif_is_lag_master(dev))
128-
return mlx5_lag_is_shared_fdb(mdev) && mlx5_lag_is_master(mdev);
123+
return mlx5_lag_is_master(mdev);
129124
return true;
130125
}
131126

@@ -455,6 +450,9 @@ static int mlx5_esw_bridge_switchdev_event(struct notifier_block *nb,
455450
if (!rep)
456451
return NOTIFY_DONE;
457452

453+
if (netif_is_lag_master(dev) && !mlx5_lag_is_shared_fdb(esw->dev))
454+
return NOTIFY_DONE;
455+
458456
switch (event) {
459457
case SWITCHDEV_FDB_ADD_TO_BRIDGE:
460458
fdb_info = container_of(info,

drivers/net/ethernet/mellanox/mlx5/core/en_main.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5132,11 +5132,9 @@ static int mlx5e_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
51325132
struct mlx5e_priv *priv = netdev_priv(dev);
51335133
struct mlx5_core_dev *mdev = priv->mdev;
51345134
u8 mode, setting;
5135-
int err;
51365135

5137-
err = mlx5_eswitch_get_vepa(mdev->priv.eswitch, &setting);
5138-
if (err)
5139-
return err;
5136+
if (mlx5_eswitch_get_vepa(mdev->priv.eswitch, &setting))
5137+
return -EOPNOTSUPP;
51405138
mode = setting ? BRIDGE_MODE_VEPA : BRIDGE_MODE_VEB;
51415139
return ndo_dflt_bridge_getlink(skb, pid, seq, dev,
51425140
mode,

drivers/net/ethernet/mellanox/mlx5/core/eq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -871,8 +871,8 @@ static void comp_irq_release_sf(struct mlx5_core_dev *dev, u16 vecidx)
871871

872872
static int comp_irq_request_sf(struct mlx5_core_dev *dev, u16 vecidx)
873873
{
874+
struct mlx5_irq_pool *pool = mlx5_irq_table_get_comp_irq_pool(dev);
874875
struct mlx5_eq_table *table = dev->priv.eq_table;
875-
struct mlx5_irq_pool *pool = mlx5_irq_pool_get(dev);
876876
struct irq_affinity_desc af_desc = {};
877877
struct mlx5_irq *irq;
878878

drivers/net/ethernet/mellanox/mlx5/core/irq_affinity.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ mlx5_irq_affinity_request(struct mlx5_core_dev *dev, struct mlx5_irq_pool *pool,
175175

176176
void mlx5_irq_affinity_irq_release(struct mlx5_core_dev *dev, struct mlx5_irq *irq)
177177
{
178-
struct mlx5_irq_pool *pool = mlx5_irq_pool_get(dev);
178+
struct mlx5_irq_pool *pool = mlx5_irq_get_pool(irq);
179179
int cpu;
180180

181181
cpu = cpumask_first(mlx5_irq_get_affinity_mask(irq));

drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -951,7 +951,7 @@ void mlx5_disable_lag(struct mlx5_lag *ldev)
951951
mlx5_eswitch_reload_ib_reps(ldev->pf[i].dev->priv.eswitch);
952952
}
953953

954-
static bool mlx5_shared_fdb_supported(struct mlx5_lag *ldev)
954+
bool mlx5_lag_shared_fdb_supported(struct mlx5_lag *ldev)
955955
{
956956
int idx = mlx5_lag_get_dev_index_by_seq(ldev, MLX5_LAG_P1);
957957
struct mlx5_core_dev *dev;
@@ -1038,7 +1038,7 @@ static void mlx5_do_bond(struct mlx5_lag *ldev)
10381038
}
10391039

10401040
if (do_bond && !__mlx5_lag_is_active(ldev)) {
1041-
bool shared_fdb = mlx5_shared_fdb_supported(ldev);
1041+
bool shared_fdb = mlx5_lag_shared_fdb_supported(ldev);
10421042

10431043
roce_lag = mlx5_lag_is_roce_lag(ldev);
10441044

drivers/net/ethernet/mellanox/mlx5/core/lag/lag.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ mlx5_lag_is_ready(struct mlx5_lag *ldev)
9292
return test_bit(MLX5_LAG_FLAG_NDEVS_READY, &ldev->state_flags);
9393
}
9494

95+
bool mlx5_lag_shared_fdb_supported(struct mlx5_lag *ldev);
9596
bool mlx5_lag_check_prereq(struct mlx5_lag *ldev);
9697
void mlx5_modify_lag(struct mlx5_lag *ldev,
9798
struct lag_tracker *tracker);

drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ static int enable_mpesw(struct mlx5_lag *ldev)
8383
if (mlx5_eswitch_mode(dev0) != MLX5_ESWITCH_OFFLOADS ||
8484
!MLX5_CAP_PORT_SELECTION(dev0, port_select_flow_table) ||
8585
!MLX5_CAP_GEN(dev0, create_lag_when_not_master_up) ||
86-
!mlx5_lag_check_prereq(ldev))
86+
!mlx5_lag_check_prereq(ldev) ||
87+
!mlx5_lag_shared_fdb_supported(ldev))
8788
return -EOPNOTSUPP;
8889

8990
err = mlx5_mpesw_metadata_set(ldev);

drivers/net/ethernet/mellanox/mlx5/core/mlx5_irq.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@
1010

1111
struct mlx5_irq;
1212
struct cpu_rmap;
13+
struct mlx5_irq_pool;
1314

1415
int mlx5_irq_table_init(struct mlx5_core_dev *dev);
1516
void mlx5_irq_table_cleanup(struct mlx5_core_dev *dev);
1617
int mlx5_irq_table_create(struct mlx5_core_dev *dev);
1718
void mlx5_irq_table_destroy(struct mlx5_core_dev *dev);
1819
void mlx5_irq_table_free_irqs(struct mlx5_core_dev *dev);
20+
struct mlx5_irq_pool *
21+
mlx5_irq_table_get_comp_irq_pool(struct mlx5_core_dev *dev);
1922
int mlx5_irq_table_get_num_comp(struct mlx5_irq_table *table);
2023
int mlx5_irq_table_get_sfs_vec(struct mlx5_irq_table *table);
2124
struct mlx5_irq_table *mlx5_irq_table_get(struct mlx5_core_dev *dev);
@@ -38,7 +41,6 @@ struct cpumask *mlx5_irq_get_affinity_mask(struct mlx5_irq *irq);
3841
int mlx5_irq_get_index(struct mlx5_irq *irq);
3942
int mlx5_irq_get_irq(const struct mlx5_irq *irq);
4043

41-
struct mlx5_irq_pool;
4244
#ifdef CONFIG_MLX5_SF
4345
struct mlx5_irq *mlx5_irq_affinity_irq_request_auto(struct mlx5_core_dev *dev,
4446
struct cpumask *used_cpus, u16 vecidx);

drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,11 @@ int mlx5_irq_get_index(struct mlx5_irq *irq)
378378
return irq->map.index;
379379
}
380380

381+
struct mlx5_irq_pool *mlx5_irq_get_pool(struct mlx5_irq *irq)
382+
{
383+
return irq->pool;
384+
}
385+
381386
/* irq_pool API */
382387

383388
/* requesting an irq from a given pool according to given index */
@@ -405,18 +410,20 @@ static struct mlx5_irq_pool *sf_ctrl_irq_pool_get(struct mlx5_irq_table *irq_tab
405410
return irq_table->sf_ctrl_pool;
406411
}
407412

408-
static struct mlx5_irq_pool *sf_irq_pool_get(struct mlx5_irq_table *irq_table)
413+
static struct mlx5_irq_pool *
414+
sf_comp_irq_pool_get(struct mlx5_irq_table *irq_table)
409415
{
410416
return irq_table->sf_comp_pool;
411417
}
412418

413-
struct mlx5_irq_pool *mlx5_irq_pool_get(struct mlx5_core_dev *dev)
419+
struct mlx5_irq_pool *
420+
mlx5_irq_table_get_comp_irq_pool(struct mlx5_core_dev *dev)
414421
{
415422
struct mlx5_irq_table *irq_table = mlx5_irq_table_get(dev);
416423
struct mlx5_irq_pool *pool = NULL;
417424

418425
if (mlx5_core_is_sf(dev))
419-
pool = sf_irq_pool_get(irq_table);
426+
pool = sf_comp_irq_pool_get(irq_table);
420427

421428
/* In some configs, there won't be a pool of SFs IRQs. Hence, returning
422429
* the PF IRQs pool in case the SF pool doesn't exist.

drivers/net/ethernet/mellanox/mlx5/core/pci_irq.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ struct mlx5_irq_pool {
2828
struct mlx5_core_dev *dev;
2929
};
3030

31-
struct mlx5_irq_pool *mlx5_irq_pool_get(struct mlx5_core_dev *dev);
3231
static inline bool mlx5_irq_pool_is_sf_pool(struct mlx5_irq_pool *pool)
3332
{
3433
return !strncmp("mlx5_sf", pool->name, strlen("mlx5_sf"));
@@ -40,5 +39,6 @@ struct mlx5_irq *mlx5_irq_alloc(struct mlx5_irq_pool *pool, int i,
4039
int mlx5_irq_get_locked(struct mlx5_irq *irq);
4140
int mlx5_irq_read_locked(struct mlx5_irq *irq);
4241
int mlx5_irq_put(struct mlx5_irq *irq);
42+
struct mlx5_irq_pool *mlx5_irq_get_pool(struct mlx5_irq *irq);
4343

4444
#endif /* __PCI_IRQ_H__ */

0 commit comments

Comments
 (0)