Commit 63f428cb authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

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: default avatarJakub Kicinski <kuba@kernel.org>
parents aed763ab a6413e6f
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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;
}

+1 −1
Original line number Diff line number Diff line
@@ -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);
+9 −14
Original line number Diff line number Diff line
@@ -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,11 +1646,9 @@ 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(
		rq, mxbuf->xdp.data_hard_start, rq->buff.frame0_sz,
@@ -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));
+12 −15
Original line number Diff line number Diff line
@@ -1241,13 +1241,10 @@ 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,
		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)) {
@@ -1256,7 +1253,6 @@ static int esw_add_fdb_peer_miss_rules(struct mlx5_eswitch *esw,
		}
		flows[peer_vport->index] = flow;
	}
	}

	if (mlx5_core_ec_sriov_enabled(peer_dev)) {
		mlx5_esw_for_each_ec_vf_vport(peer_esw, i, peer_vport,
@@ -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]);
	}