Skip to content

Commit 49ba1ca

Browse files
committed
Merge branch 'mlx5-misc-fixes-2025-04-23'
Mark Bloch says: ==================== mlx5 misc fixes 2025-04-23 This patchset includes misc fixes from the team for the mlx5 core and Ethernet drivers. ==================== Link: https://patch.msgid.link/20250423083611.324567-1-mbloch@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2 parents bf20af0 + 90538d2 commit 49ba1ca

File tree

6 files changed

+44
-19
lines changed

6 files changed

+44
-19
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,29 +176,27 @@ static int mlx5e_tx_reporter_ptpsq_unhealthy_recover(void *ctx)
176176

177177
priv = ptpsq->txqsq.priv;
178178

179+
rtnl_lock();
179180
mutex_lock(&priv->state_lock);
180181
chs = &priv->channels;
181182
netdev = priv->netdev;
182183

183184
carrier_ok = netif_carrier_ok(netdev);
184185
netif_carrier_off(netdev);
185186

186-
rtnl_lock();
187187
mlx5e_deactivate_priv_channels(priv);
188-
rtnl_unlock();
189188

190189
mlx5e_ptp_close(chs->ptp);
191190
err = mlx5e_ptp_open(priv, &chs->params, chs->c[0]->lag_port, &chs->ptp);
192191

193-
rtnl_lock();
194192
mlx5e_activate_priv_channels(priv);
195-
rtnl_unlock();
196193

197194
/* return carrier back if needed */
198195
if (carrier_ok)
199196
netif_carrier_on(netdev);
200197

201198
mutex_unlock(&priv->state_lock);
199+
rtnl_unlock();
202200

203201
return err;
204202
}

drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,6 @@ static int mlx5e_tc_tun_parse_vxlan(struct mlx5e_priv *priv,
165165
struct flow_match_enc_keyid enc_keyid;
166166
void *misc_c, *misc_v;
167167

168-
misc_c = MLX5_ADDR_OF(fte_match_param, spec->match_criteria, misc_parameters);
169-
misc_v = MLX5_ADDR_OF(fte_match_param, spec->match_value, misc_parameters);
170-
171168
if (!flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_ENC_KEYID))
172169
return 0;
173170

@@ -182,6 +179,30 @@ static int mlx5e_tc_tun_parse_vxlan(struct mlx5e_priv *priv,
182179
err = mlx5e_tc_tun_parse_vxlan_gbp_option(priv, spec, f);
183180
if (err)
184181
return err;
182+
183+
/* We can't mix custom tunnel headers with symbolic ones and we
184+
* don't have a symbolic field name for GBP, so we use custom
185+
* tunnel headers in this case. We need hardware support to
186+
* match on custom tunnel headers, but we already know it's
187+
* supported because the previous call successfully checked for
188+
* that.
189+
*/
190+
misc_c = MLX5_ADDR_OF(fte_match_param, spec->match_criteria,
191+
misc_parameters_5);
192+
misc_v = MLX5_ADDR_OF(fte_match_param, spec->match_value,
193+
misc_parameters_5);
194+
195+
/* Shift by 8 to account for the reserved bits in the vxlan
196+
* header after the VNI.
197+
*/
198+
MLX5_SET(fte_match_set_misc5, misc_c, tunnel_header_1,
199+
be32_to_cpu(enc_keyid.mask->keyid) << 8);
200+
MLX5_SET(fte_match_set_misc5, misc_v, tunnel_header_1,
201+
be32_to_cpu(enc_keyid.key->keyid) << 8);
202+
203+
spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS_5;
204+
205+
return 0;
185206
}
186207

187208
/* match on VNI is required */
@@ -195,6 +216,11 @@ static int mlx5e_tc_tun_parse_vxlan(struct mlx5e_priv *priv,
195216
return -EOPNOTSUPP;
196217
}
197218

219+
misc_c = MLX5_ADDR_OF(fte_match_param, spec->match_criteria,
220+
misc_parameters);
221+
misc_v = MLX5_ADDR_OF(fte_match_param, spec->match_value,
222+
misc_parameters);
223+
198224
MLX5_SET(fte_match_set_misc, misc_c, vxlan_vni,
199225
be32_to_cpu(enc_keyid.mask->keyid));
200226
MLX5_SET(fte_match_set_misc, misc_v, vxlan_vni,

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1750,9 +1750,6 @@ extra_split_attr_dests_needed(struct mlx5e_tc_flow *flow, struct mlx5_flow_attr
17501750
!list_is_first(&attr->list, &flow->attrs))
17511751
return 0;
17521752

1753-
if (flow_flag_test(flow, SLOW))
1754-
return 0;
1755-
17561753
esw_attr = attr->esw_attr;
17571754
if (!esw_attr->split_count ||
17581755
esw_attr->split_count == esw_attr->out_count - 1)
@@ -1766,7 +1763,7 @@ extra_split_attr_dests_needed(struct mlx5e_tc_flow *flow, struct mlx5_flow_attr
17661763
for (i = esw_attr->split_count; i < esw_attr->out_count; i++) {
17671764
/* external dest with encap is considered as internal by firmware */
17681765
if (esw_attr->dests[i].vport == MLX5_VPORT_UPLINK &&
1769-
!(esw_attr->dests[i].flags & MLX5_ESW_DEST_ENCAP_VALID))
1766+
!(esw_attr->dests[i].flags & MLX5_ESW_DEST_ENCAP))
17701767
ext_dest = true;
17711768
else
17721769
int_dest = true;

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3533,7 +3533,9 @@ int esw_offloads_enable(struct mlx5_eswitch *esw)
35333533
int err;
35343534

35353535
mutex_init(&esw->offloads.termtbl_mutex);
3536-
mlx5_rdma_enable_roce(esw->dev);
3536+
err = mlx5_rdma_enable_roce(esw->dev);
3537+
if (err)
3538+
goto err_roce;
35373539

35383540
err = mlx5_esw_host_number_init(esw);
35393541
if (err)
@@ -3594,6 +3596,7 @@ int esw_offloads_enable(struct mlx5_eswitch *esw)
35943596
esw_offloads_metadata_uninit(esw);
35953597
err_metadata:
35963598
mlx5_rdma_disable_roce(esw->dev);
3599+
err_roce:
35973600
mutex_destroy(&esw->offloads.termtbl_mutex);
35983601
return err;
35993602
}

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ static void mlx5_rdma_make_default_gid(struct mlx5_core_dev *dev, union ib_gid *
118118

119119
static int mlx5_rdma_add_roce_addr(struct mlx5_core_dev *dev)
120120
{
121+
u8 mac[ETH_ALEN] = {};
121122
union ib_gid gid;
122-
u8 mac[ETH_ALEN];
123123

124124
mlx5_rdma_make_default_gid(dev, &gid);
125125
return mlx5_core_roce_gid_set(dev, 0,
@@ -140,17 +140,17 @@ void mlx5_rdma_disable_roce(struct mlx5_core_dev *dev)
140140
mlx5_nic_vport_disable_roce(dev);
141141
}
142142

143-
void mlx5_rdma_enable_roce(struct mlx5_core_dev *dev)
143+
int mlx5_rdma_enable_roce(struct mlx5_core_dev *dev)
144144
{
145145
int err;
146146

147147
if (!MLX5_CAP_GEN(dev, roce))
148-
return;
148+
return 0;
149149

150150
err = mlx5_nic_vport_enable_roce(dev);
151151
if (err) {
152152
mlx5_core_err(dev, "Failed to enable RoCE: %d\n", err);
153-
return;
153+
return err;
154154
}
155155

156156
err = mlx5_rdma_add_roce_addr(dev);
@@ -165,10 +165,11 @@ void mlx5_rdma_enable_roce(struct mlx5_core_dev *dev)
165165
goto del_roce_addr;
166166
}
167167

168-
return;
168+
return err;
169169

170170
del_roce_addr:
171171
mlx5_rdma_del_roce_addr(dev);
172172
disable_roce:
173173
mlx5_nic_vport_disable_roce(dev);
174+
return err;
174175
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88

99
#ifdef CONFIG_MLX5_ESWITCH
1010

11-
void mlx5_rdma_enable_roce(struct mlx5_core_dev *dev);
11+
int mlx5_rdma_enable_roce(struct mlx5_core_dev *dev);
1212
void mlx5_rdma_disable_roce(struct mlx5_core_dev *dev);
1313

1414
#else /* CONFIG_MLX5_ESWITCH */
1515

16-
static inline void mlx5_rdma_enable_roce(struct mlx5_core_dev *dev) {}
16+
static inline int mlx5_rdma_enable_roce(struct mlx5_core_dev *dev) { return 0; }
1717
static inline void mlx5_rdma_disable_roce(struct mlx5_core_dev *dev) {}
1818

1919
#endif /* CONFIG_MLX5_ESWITCH */

0 commit comments

Comments
 (0)