mirror of
https://github.com/torvalds/linux.git
synced 2026-07-29 10:41:49 +02:00
Merge branch 'mlx5-misc-fixes-2026-03-05'
Tariq Toukan says: ==================== mlx5 misc fixes 2026-03-05 This patchset provides misc bug fixes from the team to the mlx5 core and Eth drivers. ==================== Link: https://patch.msgid.link/20260305142634.1813208-1-tariqt@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
63f428cb94
|
|
@ -47,7 +47,6 @@ static void mlx5e_reset_txqsq_cc_pc(struct mlx5e_txqsq *sq)
|
|||
"SQ 0x%x: cc (0x%x) != pc (0x%x)\n",
|
||||
sq->sqn, sq->cc, sq->pc);
|
||||
sq->cc = 0;
|
||||
sq->dma_fifo_cc = 0;
|
||||
sq->pc = 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2912,7 +2912,7 @@ void mlx5e_ipsec_disable_events(struct mlx5e_priv *priv)
|
|||
goto out;
|
||||
|
||||
peer_priv = mlx5_devcom_get_next_peer_data(priv->devcom, &tmp);
|
||||
if (peer_priv)
|
||||
if (peer_priv && peer_priv->ipsec)
|
||||
complete_all(&peer_priv->ipsec->comp);
|
||||
|
||||
mlx5_devcom_for_each_peer_end(priv->devcom);
|
||||
|
|
|
|||
|
|
@ -1589,6 +1589,7 @@ mlx5e_skb_from_cqe_nonlinear(struct mlx5e_rq *rq, struct mlx5e_wqe_frag_info *wi
|
|||
struct skb_shared_info *sinfo;
|
||||
u32 frag_consumed_bytes;
|
||||
struct bpf_prog *prog;
|
||||
u8 nr_frags_free = 0;
|
||||
struct sk_buff *skb;
|
||||
dma_addr_t addr;
|
||||
u32 truesize;
|
||||
|
|
@ -1631,15 +1632,13 @@ mlx5e_skb_from_cqe_nonlinear(struct mlx5e_rq *rq, struct mlx5e_wqe_frag_info *wi
|
|||
|
||||
prog = rcu_dereference(rq->xdp_prog);
|
||||
if (prog) {
|
||||
u8 nr_frags_free, old_nr_frags = sinfo->nr_frags;
|
||||
u8 old_nr_frags = sinfo->nr_frags;
|
||||
|
||||
if (mlx5e_xdp_handle(rq, prog, mxbuf)) {
|
||||
if (__test_and_clear_bit(MLX5E_RQ_FLAG_XDP_XMIT,
|
||||
rq->flags)) {
|
||||
struct mlx5e_wqe_frag_info *pwi;
|
||||
|
||||
wi -= old_nr_frags - sinfo->nr_frags;
|
||||
|
||||
for (pwi = head_wi; pwi < wi; pwi++)
|
||||
pwi->frag_page->frags++;
|
||||
}
|
||||
|
|
@ -1647,10 +1646,8 @@ mlx5e_skb_from_cqe_nonlinear(struct mlx5e_rq *rq, struct mlx5e_wqe_frag_info *wi
|
|||
}
|
||||
|
||||
nr_frags_free = old_nr_frags - sinfo->nr_frags;
|
||||
if (unlikely(nr_frags_free)) {
|
||||
wi -= nr_frags_free;
|
||||
if (unlikely(nr_frags_free))
|
||||
truesize -= nr_frags_free * frag_info->frag_stride;
|
||||
}
|
||||
}
|
||||
|
||||
skb = mlx5e_build_linear_skb(
|
||||
|
|
@ -1666,7 +1663,7 @@ mlx5e_skb_from_cqe_nonlinear(struct mlx5e_rq *rq, struct mlx5e_wqe_frag_info *wi
|
|||
|
||||
if (xdp_buff_has_frags(&mxbuf->xdp)) {
|
||||
/* sinfo->nr_frags is reset by build_skb, calculate again. */
|
||||
xdp_update_skb_frags_info(skb, wi - head_wi - 1,
|
||||
xdp_update_skb_frags_info(skb, wi - head_wi - nr_frags_free - 1,
|
||||
sinfo->xdp_frags_size, truesize,
|
||||
xdp_buff_get_skb_flags(&mxbuf->xdp));
|
||||
|
||||
|
|
@ -1957,14 +1954,13 @@ mlx5e_skb_from_cqe_mpwrq_nonlinear(struct mlx5e_rq *rq, struct mlx5e_mpw_info *w
|
|||
|
||||
if (prog) {
|
||||
u8 nr_frags_free, old_nr_frags = sinfo->nr_frags;
|
||||
u8 new_nr_frags;
|
||||
u32 len;
|
||||
|
||||
if (mlx5e_xdp_handle(rq, prog, mxbuf)) {
|
||||
if (__test_and_clear_bit(MLX5E_RQ_FLAG_XDP_XMIT, rq->flags)) {
|
||||
struct mlx5e_frag_page *pfp;
|
||||
|
||||
frag_page -= old_nr_frags - sinfo->nr_frags;
|
||||
|
||||
for (pfp = head_page; pfp < frag_page; pfp++)
|
||||
pfp->frags++;
|
||||
|
||||
|
|
@ -1975,13 +1971,12 @@ mlx5e_skb_from_cqe_mpwrq_nonlinear(struct mlx5e_rq *rq, struct mlx5e_mpw_info *w
|
|||
return NULL; /* page/packet was consumed by XDP */
|
||||
}
|
||||
|
||||
nr_frags_free = old_nr_frags - sinfo->nr_frags;
|
||||
if (unlikely(nr_frags_free)) {
|
||||
frag_page -= nr_frags_free;
|
||||
new_nr_frags = sinfo->nr_frags;
|
||||
nr_frags_free = old_nr_frags - new_nr_frags;
|
||||
if (unlikely(nr_frags_free))
|
||||
truesize -= (nr_frags_free - 1) * PAGE_SIZE +
|
||||
ALIGN(pg_consumed_bytes,
|
||||
BIT(rq->mpwqe.log_stride_sz));
|
||||
}
|
||||
|
||||
len = mxbuf->xdp.data_end - mxbuf->xdp.data;
|
||||
|
||||
|
|
@ -2003,7 +1998,7 @@ mlx5e_skb_from_cqe_mpwrq_nonlinear(struct mlx5e_rq *rq, struct mlx5e_mpw_info *w
|
|||
struct mlx5e_frag_page *pagep;
|
||||
|
||||
/* sinfo->nr_frags is reset by build_skb, calculate again. */
|
||||
xdp_update_skb_frags_info(skb, frag_page - head_page,
|
||||
xdp_update_skb_frags_info(skb, new_nr_frags,
|
||||
sinfo->xdp_frags_size,
|
||||
truesize,
|
||||
xdp_buff_get_skb_flags(&mxbuf->xdp));
|
||||
|
|
|
|||
|
|
@ -1241,21 +1241,17 @@ static int esw_add_fdb_peer_miss_rules(struct mlx5_eswitch *esw,
|
|||
flows[peer_vport->index] = flow;
|
||||
}
|
||||
|
||||
if (mlx5_esw_host_functions_enabled(esw->dev)) {
|
||||
mlx5_esw_for_each_vf_vport(peer_esw, i, peer_vport,
|
||||
mlx5_core_max_vfs(peer_dev)) {
|
||||
esw_set_peer_miss_rule_source_port(esw, peer_esw,
|
||||
spec,
|
||||
peer_vport->vport);
|
||||
|
||||
flow = mlx5_add_flow_rules(mlx5_eswitch_get_slow_fdb(esw),
|
||||
spec, &flow_act, &dest, 1);
|
||||
if (IS_ERR(flow)) {
|
||||
err = PTR_ERR(flow);
|
||||
goto add_vf_flow_err;
|
||||
}
|
||||
flows[peer_vport->index] = flow;
|
||||
mlx5_esw_for_each_vf_vport(peer_esw, i, peer_vport,
|
||||
mlx5_core_max_vfs(peer_dev)) {
|
||||
esw_set_peer_miss_rule_source_port(esw, peer_esw, spec,
|
||||
peer_vport->vport);
|
||||
flow = mlx5_add_flow_rules(mlx5_eswitch_get_slow_fdb(esw),
|
||||
spec, &flow_act, &dest, 1);
|
||||
if (IS_ERR(flow)) {
|
||||
err = PTR_ERR(flow);
|
||||
goto add_vf_flow_err;
|
||||
}
|
||||
flows[peer_vport->index] = flow;
|
||||
}
|
||||
|
||||
if (mlx5_core_ec_sriov_enabled(peer_dev)) {
|
||||
|
|
@ -1347,7 +1343,8 @@ static void esw_del_fdb_peer_miss_rules(struct mlx5_eswitch *esw,
|
|||
mlx5_del_flow_rules(flows[peer_vport->index]);
|
||||
}
|
||||
|
||||
if (mlx5_core_is_ecpf_esw_manager(peer_dev)) {
|
||||
if (mlx5_core_is_ecpf_esw_manager(peer_dev) &&
|
||||
mlx5_esw_host_functions_enabled(peer_dev)) {
|
||||
peer_vport = mlx5_eswitch_get_vport(peer_esw, MLX5_VPORT_PF);
|
||||
mlx5_del_flow_rules(flows[peer_vport->index]);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user