Skip to content

Commit 676d53a

Browse files
author
Paolo Abeni
committed
Merge branch 'mlx5-misc-fixes-2025-01-15'
Tariq Toukan says: ==================== mlx5 misc fixes 2025-01-15 This patchset provides misc bug fixes from the team to the mlx5 core and Eth drivers. ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
2 parents cbc16bc + 7f95b02 commit 676d53a

File tree

7 files changed

+42
-33
lines changed

7 files changed

+42
-33
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,12 @@ static int mlx5e_xfrm_add_state(struct xfrm_state *x,
724724
/* check esn */
725725
if (x->props.flags & XFRM_STATE_ESN)
726726
mlx5e_ipsec_update_esn_state(sa_entry);
727+
else
728+
/* According to RFC4303, section "3.3.3. Sequence Number Generation",
729+
* the first packet sent using a given SA will contain a sequence
730+
* number of 1.
731+
*/
732+
sa_entry->esn_state.esn = 1;
727733

728734
mlx5e_ipsec_build_accel_xfrm_attrs(sa_entry, &sa_entry->attrs);
729735

@@ -768,9 +774,12 @@ static int mlx5e_xfrm_add_state(struct xfrm_state *x,
768774
MLX5_IPSEC_RESCHED);
769775

770776
if (x->xso.type == XFRM_DEV_OFFLOAD_PACKET &&
771-
x->props.mode == XFRM_MODE_TUNNEL)
772-
xa_set_mark(&ipsec->sadb, sa_entry->ipsec_obj_id,
773-
MLX5E_IPSEC_TUNNEL_SA);
777+
x->props.mode == XFRM_MODE_TUNNEL) {
778+
xa_lock_bh(&ipsec->sadb);
779+
__xa_set_mark(&ipsec->sadb, sa_entry->ipsec_obj_id,
780+
MLX5E_IPSEC_TUNNEL_SA);
781+
xa_unlock_bh(&ipsec->sadb);
782+
}
774783

775784
out:
776785
x->xso.offload_handle = (unsigned long)sa_entry;
@@ -797,7 +806,6 @@ static int mlx5e_xfrm_add_state(struct xfrm_state *x,
797806
static void mlx5e_xfrm_del_state(struct xfrm_state *x)
798807
{
799808
struct mlx5e_ipsec_sa_entry *sa_entry = to_ipsec_sa_entry(x);
800-
struct mlx5_accel_esp_xfrm_attrs *attrs = &sa_entry->attrs;
801809
struct mlx5e_ipsec *ipsec = sa_entry->ipsec;
802810
struct mlx5e_ipsec_sa_entry *old;
803811

@@ -806,12 +814,6 @@ static void mlx5e_xfrm_del_state(struct xfrm_state *x)
806814

807815
old = xa_erase_bh(&ipsec->sadb, sa_entry->ipsec_obj_id);
808816
WARN_ON(old != sa_entry);
809-
810-
if (attrs->mode == XFRM_MODE_TUNNEL &&
811-
attrs->type == XFRM_DEV_OFFLOAD_PACKET)
812-
/* Make sure that no ARP requests are running in parallel */
813-
flush_workqueue(ipsec->wq);
814-
815817
}
816818

817819
static void mlx5e_xfrm_free_state(struct xfrm_state *x)

drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1718,23 +1718,21 @@ static int tx_add_rule(struct mlx5e_ipsec_sa_entry *sa_entry)
17181718
goto err_alloc;
17191719
}
17201720

1721-
if (attrs->family == AF_INET)
1722-
setup_fte_addr4(spec, &attrs->saddr.a4, &attrs->daddr.a4);
1723-
else
1724-
setup_fte_addr6(spec, attrs->saddr.a6, attrs->daddr.a6);
1725-
17261721
setup_fte_no_frags(spec);
17271722
setup_fte_upper_proto_match(spec, &attrs->upspec);
17281723

17291724
switch (attrs->type) {
17301725
case XFRM_DEV_OFFLOAD_CRYPTO:
1726+
if (attrs->family == AF_INET)
1727+
setup_fte_addr4(spec, &attrs->saddr.a4, &attrs->daddr.a4);
1728+
else
1729+
setup_fte_addr6(spec, attrs->saddr.a6, attrs->daddr.a6);
17311730
setup_fte_spi(spec, attrs->spi, false);
17321731
setup_fte_esp(spec);
17331732
setup_fte_reg_a(spec);
17341733
break;
17351734
case XFRM_DEV_OFFLOAD_PACKET:
1736-
if (attrs->reqid)
1737-
setup_fte_reg_c4(spec, attrs->reqid);
1735+
setup_fte_reg_c4(spec, attrs->reqid);
17381736
err = setup_pkt_reformat(ipsec, attrs, &flow_act);
17391737
if (err)
17401738
goto err_pkt_reformat;

drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_offload.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,9 @@ u32 mlx5_ipsec_device_caps(struct mlx5_core_dev *mdev)
9191
EXPORT_SYMBOL_GPL(mlx5_ipsec_device_caps);
9292

9393
static void mlx5e_ipsec_packet_setup(void *obj, u32 pdn,
94-
struct mlx5_accel_esp_xfrm_attrs *attrs)
94+
struct mlx5e_ipsec_sa_entry *sa_entry)
9595
{
96+
struct mlx5_accel_esp_xfrm_attrs *attrs = &sa_entry->attrs;
9697
void *aso_ctx;
9798

9899
aso_ctx = MLX5_ADDR_OF(ipsec_obj, obj, ipsec_aso);
@@ -120,8 +121,12 @@ static void mlx5e_ipsec_packet_setup(void *obj, u32 pdn,
120121
* active.
121122
*/
122123
MLX5_SET(ipsec_obj, obj, aso_return_reg, MLX5_IPSEC_ASO_REG_C_4_5);
123-
if (attrs->dir == XFRM_DEV_OFFLOAD_OUT)
124+
if (attrs->dir == XFRM_DEV_OFFLOAD_OUT) {
124125
MLX5_SET(ipsec_aso, aso_ctx, mode, MLX5_IPSEC_ASO_INC_SN);
126+
if (!attrs->replay_esn.trigger)
127+
MLX5_SET(ipsec_aso, aso_ctx, mode_parameter,
128+
sa_entry->esn_state.esn);
129+
}
125130

126131
if (attrs->lft.hard_packet_limit != XFRM_INF) {
127132
MLX5_SET(ipsec_aso, aso_ctx, remove_flow_pkt_cnt,
@@ -175,7 +180,7 @@ static int mlx5_create_ipsec_obj(struct mlx5e_ipsec_sa_entry *sa_entry)
175180

176181
res = &mdev->mlx5e_res.hw_objs;
177182
if (attrs->type == XFRM_DEV_OFFLOAD_PACKET)
178-
mlx5e_ipsec_packet_setup(obj, res->pdn, attrs);
183+
mlx5e_ipsec_packet_setup(obj, res->pdn, sa_entry);
179184

180185
err = mlx5_cmd_exec(mdev, in, sizeof(in), out, sizeof(out));
181186
if (!err)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2709,6 +2709,7 @@ struct mlx5_flow_namespace *mlx5_get_flow_namespace(struct mlx5_core_dev *dev,
27092709
break;
27102710
case MLX5_FLOW_NAMESPACE_RDMA_TX:
27112711
root_ns = steering->rdma_tx_root_ns;
2712+
prio = RDMA_TX_BYPASS_PRIO;
27122713
break;
27132714
case MLX5_FLOW_NAMESPACE_RDMA_RX_COUNTERS:
27142715
root_ns = steering->rdma_rx_root_ns;

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,7 @@ int mlx5_lag_port_sel_create(struct mlx5_lag *ldev,
530530
set_tt_map(port_sel, hash_type);
531531
err = mlx5_lag_create_definers(ldev, hash_type, ports);
532532
if (err)
533-
return err;
533+
goto clear_port_sel;
534534

535535
if (port_sel->tunnel) {
536536
err = mlx5_lag_create_inner_ttc_table(ldev);
@@ -549,6 +549,8 @@ int mlx5_lag_port_sel_create(struct mlx5_lag *ldev,
549549
mlx5_destroy_ttc_table(port_sel->inner.ttc);
550550
destroy_definers:
551551
mlx5_lag_destroy_definers(ldev);
552+
clear_port_sel:
553+
memset(port_sel, 0, sizeof(*port_sel));
552554
return err;
553555
}
554556

drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ static int mlx5_sf_add(struct mlx5_core_dev *dev, struct mlx5_sf_table *table,
257257
return 0;
258258

259259
esw_err:
260+
mlx5_sf_function_id_erase(table, sf);
260261
mlx5_sf_free(table, sf);
261262
return err;
262263
}

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ static void mlx5_core_test_wc(struct mlx5_core_dev *mdev)
382382

383383
bool mlx5_wc_support_get(struct mlx5_core_dev *mdev)
384384
{
385+
struct mutex *wc_state_lock = &mdev->wc_state_lock;
385386
struct mlx5_core_dev *parent = NULL;
386387

387388
if (!MLX5_CAP_GEN(mdev, bf)) {
@@ -400,32 +401,31 @@ bool mlx5_wc_support_get(struct mlx5_core_dev *mdev)
400401
*/
401402
goto out;
402403

403-
mutex_lock(&mdev->wc_state_lock);
404-
405-
if (mdev->wc_state != MLX5_WC_STATE_UNINITIALIZED)
406-
goto unlock;
407-
408404
#ifdef CONFIG_MLX5_SF
409-
if (mlx5_core_is_sf(mdev))
405+
if (mlx5_core_is_sf(mdev)) {
410406
parent = mdev->priv.parent_mdev;
407+
wc_state_lock = &parent->wc_state_lock;
408+
}
411409
#endif
412410

413-
if (parent) {
414-
mutex_lock(&parent->wc_state_lock);
411+
mutex_lock(wc_state_lock);
415412

413+
if (mdev->wc_state != MLX5_WC_STATE_UNINITIALIZED)
414+
goto unlock;
415+
416+
if (parent) {
416417
mlx5_core_test_wc(parent);
417418

418419
mlx5_core_dbg(mdev, "parent set wc_state=%d\n",
419420
parent->wc_state);
420421
mdev->wc_state = parent->wc_state;
421422

422-
mutex_unlock(&parent->wc_state_lock);
423+
} else {
424+
mlx5_core_test_wc(mdev);
423425
}
424426

425-
mlx5_core_test_wc(mdev);
426-
427427
unlock:
428-
mutex_unlock(&mdev->wc_state_lock);
428+
mutex_unlock(wc_state_lock);
429429
out:
430430
mlx5_core_dbg(mdev, "wc_state=%d\n", mdev->wc_state);
431431

0 commit comments

Comments
 (0)