Skip to content

Commit 179a8b5

Browse files
committed
Merge tag 'mlx5-fixes-2023-12-04' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux
Saeed Mahameed says: ==================== mlx5 fixes 2023-12-04 This series provides bug fixes to mlx5 driver. V1->V2: - Drop commit #9 ("net/mlx5e: Forbid devlink reload if IPSec rules are offloaded"), we are working on a better fix Please pull and let me know if there is any problem. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 5e3f5b8 + ca4ef28 commit 179a8b5

File tree

16 files changed

+586
-310
lines changed

16 files changed

+586
-310
lines changed

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

+1
Original file line numberDiff line numberDiff line change
@@ -826,6 +826,7 @@ enum {
826826
MLX5E_STATE_DESTROYING,
827827
MLX5E_STATE_XDP_TX_ENABLED,
828828
MLX5E_STATE_XDP_ACTIVE,
829+
MLX5E_STATE_CHANNELS_ACTIVE,
829830
};
830831

831832
struct mlx5e_modify_sq_param {

drivers/net/ethernet/mellanox/mlx5/core/en/tc/post_act.c

+6
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ mlx5e_tc_post_act_offload(struct mlx5e_post_act *post_act,
8383
struct mlx5_flow_spec *spec;
8484
int err;
8585

86+
if (IS_ERR(post_act))
87+
return PTR_ERR(post_act);
88+
8689
spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
8790
if (!spec)
8891
return -ENOMEM;
@@ -111,6 +114,9 @@ mlx5e_tc_post_act_add(struct mlx5e_post_act *post_act, struct mlx5_flow_attr *po
111114
struct mlx5e_post_act_handle *handle;
112115
int err;
113116

117+
if (IS_ERR(post_act))
118+
return ERR_CAST(post_act);
119+
114120
handle = kzalloc(sizeof(*handle), GFP_KERNEL);
115121
if (!handle)
116122
return ERR_PTR(-ENOMEM);

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

+40-16
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,14 @@ static bool mlx5e_ipsec_update_esn_state(struct mlx5e_ipsec_sa_entry *sa_entry)
121121
if (x->xso.type == XFRM_DEV_OFFLOAD_CRYPTO)
122122
esn_msb = xfrm_replay_seqhi(x, htonl(seq_bottom));
123123

124-
sa_entry->esn_state.esn = esn;
124+
if (sa_entry->esn_state.esn_msb)
125+
sa_entry->esn_state.esn = esn;
126+
else
127+
/* According to RFC4303, section "3.3.3. Sequence Number Generation",
128+
* the first packet sent using a given SA will contain a sequence
129+
* number of 1.
130+
*/
131+
sa_entry->esn_state.esn = max_t(u32, esn, 1);
125132
sa_entry->esn_state.esn_msb = esn_msb;
126133

127134
if (unlikely(overlap && seq_bottom < MLX5E_IPSEC_ESN_SCOPE_MID)) {
@@ -335,6 +342,27 @@ void mlx5e_ipsec_build_accel_xfrm_attrs(struct mlx5e_ipsec_sa_entry *sa_entry,
335342
attrs->replay_esn.esn = sa_entry->esn_state.esn;
336343
attrs->replay_esn.esn_msb = sa_entry->esn_state.esn_msb;
337344
attrs->replay_esn.overlap = sa_entry->esn_state.overlap;
345+
switch (x->replay_esn->replay_window) {
346+
case 32:
347+
attrs->replay_esn.replay_window =
348+
MLX5_IPSEC_ASO_REPLAY_WIN_32BIT;
349+
break;
350+
case 64:
351+
attrs->replay_esn.replay_window =
352+
MLX5_IPSEC_ASO_REPLAY_WIN_64BIT;
353+
break;
354+
case 128:
355+
attrs->replay_esn.replay_window =
356+
MLX5_IPSEC_ASO_REPLAY_WIN_128BIT;
357+
break;
358+
case 256:
359+
attrs->replay_esn.replay_window =
360+
MLX5_IPSEC_ASO_REPLAY_WIN_256BIT;
361+
break;
362+
default:
363+
WARN_ON(true);
364+
return;
365+
}
338366
}
339367

340368
attrs->dir = x->xso.dir;
@@ -907,9 +935,11 @@ void mlx5e_ipsec_cleanup(struct mlx5e_priv *priv)
907935
return;
908936

909937
mlx5e_accel_ipsec_fs_cleanup(ipsec);
910-
if (mlx5_ipsec_device_caps(priv->mdev) & MLX5_IPSEC_CAP_TUNNEL)
938+
if (ipsec->netevent_nb.notifier_call) {
911939
unregister_netevent_notifier(&ipsec->netevent_nb);
912-
if (mlx5_ipsec_device_caps(priv->mdev) & MLX5_IPSEC_CAP_PACKET_OFFLOAD)
940+
ipsec->netevent_nb.notifier_call = NULL;
941+
}
942+
if (ipsec->aso)
913943
mlx5e_ipsec_aso_cleanup(ipsec);
914944
destroy_workqueue(ipsec->wq);
915945
kfree(ipsec);
@@ -1018,6 +1048,12 @@ static int mlx5e_xfrm_validate_policy(struct mlx5_core_dev *mdev,
10181048
}
10191049
}
10201050

1051+
if (x->xdo.type == XFRM_DEV_OFFLOAD_PACKET &&
1052+
!(mlx5_ipsec_device_caps(mdev) & MLX5_IPSEC_CAP_PACKET_OFFLOAD)) {
1053+
NL_SET_ERR_MSG_MOD(extack, "Packet offload is not supported");
1054+
return -EINVAL;
1055+
}
1056+
10211057
return 0;
10221058
}
10231059

@@ -1113,14 +1149,6 @@ static const struct xfrmdev_ops mlx5e_ipsec_xfrmdev_ops = {
11131149
.xdo_dev_state_free = mlx5e_xfrm_free_state,
11141150
.xdo_dev_offload_ok = mlx5e_ipsec_offload_ok,
11151151
.xdo_dev_state_advance_esn = mlx5e_xfrm_advance_esn_state,
1116-
};
1117-
1118-
static const struct xfrmdev_ops mlx5e_ipsec_packet_xfrmdev_ops = {
1119-
.xdo_dev_state_add = mlx5e_xfrm_add_state,
1120-
.xdo_dev_state_delete = mlx5e_xfrm_del_state,
1121-
.xdo_dev_state_free = mlx5e_xfrm_free_state,
1122-
.xdo_dev_offload_ok = mlx5e_ipsec_offload_ok,
1123-
.xdo_dev_state_advance_esn = mlx5e_xfrm_advance_esn_state,
11241152

11251153
.xdo_dev_state_update_curlft = mlx5e_xfrm_update_curlft,
11261154
.xdo_dev_policy_add = mlx5e_xfrm_add_policy,
@@ -1138,11 +1166,7 @@ void mlx5e_ipsec_build_netdev(struct mlx5e_priv *priv)
11381166

11391167
mlx5_core_info(mdev, "mlx5e: IPSec ESP acceleration enabled\n");
11401168

1141-
if (mlx5_ipsec_device_caps(mdev) & MLX5_IPSEC_CAP_PACKET_OFFLOAD)
1142-
netdev->xfrmdev_ops = &mlx5e_ipsec_packet_xfrmdev_ops;
1143-
else
1144-
netdev->xfrmdev_ops = &mlx5e_ipsec_xfrmdev_ops;
1145-
1169+
netdev->xfrmdev_ops = &mlx5e_ipsec_xfrmdev_ops;
11461170
netdev->features |= NETIF_F_HW_ESP;
11471171
netdev->hw_enc_features |= NETIF_F_HW_ESP;
11481172

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

+9-13
Original file line numberDiff line numberDiff line change
@@ -189,31 +189,26 @@ struct mlx5e_ipsec_ft {
189189
u32 refcnt;
190190
};
191191

192+
struct mlx5e_ipsec_drop {
193+
struct mlx5_flow_handle *rule;
194+
struct mlx5_fc *fc;
195+
};
196+
192197
struct mlx5e_ipsec_rule {
193198
struct mlx5_flow_handle *rule;
194199
struct mlx5_modify_hdr *modify_hdr;
195200
struct mlx5_pkt_reformat *pkt_reformat;
196201
struct mlx5_fc *fc;
202+
struct mlx5e_ipsec_drop replay;
203+
struct mlx5e_ipsec_drop auth;
204+
struct mlx5e_ipsec_drop trailer;
197205
};
198206

199207
struct mlx5e_ipsec_miss {
200208
struct mlx5_flow_group *group;
201209
struct mlx5_flow_handle *rule;
202210
};
203211

204-
struct mlx5e_ipsec_rx {
205-
struct mlx5e_ipsec_ft ft;
206-
struct mlx5e_ipsec_miss pol;
207-
struct mlx5e_ipsec_miss sa;
208-
struct mlx5e_ipsec_rule status;
209-
struct mlx5e_ipsec_miss status_drop;
210-
struct mlx5_fc *status_drop_cnt;
211-
struct mlx5e_ipsec_fc *fc;
212-
struct mlx5_fs_chains *chains;
213-
u8 allow_tunnel_mode : 1;
214-
struct xarray ipsec_obj_id_map;
215-
};
216-
217212
struct mlx5e_ipsec_tx_create_attr {
218213
int prio;
219214
int pol_level;
@@ -248,6 +243,7 @@ struct mlx5e_ipsec {
248243
struct mlx5_ipsec_fs *roce;
249244
u8 is_uplink_rep: 1;
250245
struct mlx5e_ipsec_mpv_work mpv_work;
246+
struct xarray ipsec_obj_id_map;
251247
};
252248

253249
struct mlx5e_ipsec_esn_state {

0 commit comments

Comments
 (0)