Commit 186abfcd authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'mlx5-misc-fixes'

Tariq Toukan says:

====================
mlx5 misc fixes

This patchset provides bug fixes to mlx5 driver.

This is V2 of the series previously submitted as PR by Saeed:
https://lore.kernel.org/netdev/20240326144646.2078893-1-saeed@kernel.org/T/

Series generated against:
commit 237f3cf1 ("xsk: validate user input for XDP_{UMEM|COMPLETION}_FILL_RING")
====================

Link: https://lore.kernel.org/r/20240409190820.227554-1-tariqt@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 65acf6e0 7772dc74
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -95,9 +95,15 @@ static inline void mlx5e_ptp_metadata_fifo_push(struct mlx5e_ptp_metadata_fifo *
}

static inline u8
mlx5e_ptp_metadata_fifo_peek(struct mlx5e_ptp_metadata_fifo *fifo)
{
	return fifo->data[fifo->mask & fifo->cc];
}

static inline void
mlx5e_ptp_metadata_fifo_pop(struct mlx5e_ptp_metadata_fifo *fifo)
{
	return fifo->data[fifo->mask & fifo->cc++];
	fifo->cc++;
}

static inline void
+17 −16
Original line number Diff line number Diff line
@@ -83,24 +83,25 @@ int mlx5e_open_qos_sq(struct mlx5e_priv *priv, struct mlx5e_channels *chs,

	txq_ix = mlx5e_qid_from_qos(chs, node_qid);

	WARN_ON(node_qid > priv->htb_max_qos_sqs);
	if (node_qid == priv->htb_max_qos_sqs) {
		struct mlx5e_sq_stats *stats, **stats_list = NULL;
	WARN_ON(node_qid >= mlx5e_htb_cur_leaf_nodes(priv->htb));
	if (!priv->htb_qos_sq_stats) {
		struct mlx5e_sq_stats **stats_list;

		if (priv->htb_max_qos_sqs == 0) {
		stats_list = kvcalloc(mlx5e_qos_max_leaf_nodes(priv->mdev),
					      sizeof(*stats_list),
					      GFP_KERNEL);
				      sizeof(*stats_list), GFP_KERNEL);
		if (!stats_list)
			return -ENOMEM;

		WRITE_ONCE(priv->htb_qos_sq_stats, stats_list);
	}

	if (!priv->htb_qos_sq_stats[node_qid]) {
		struct mlx5e_sq_stats *stats;

		stats = kzalloc(sizeof(*stats), GFP_KERNEL);
		if (!stats) {
			kvfree(stats_list);
		if (!stats)
			return -ENOMEM;
		}
		if (stats_list)
			WRITE_ONCE(priv->htb_qos_sq_stats, stats_list);

		WRITE_ONCE(priv->htb_qos_sq_stats[node_qid], stats);
		/* Order htb_max_qos_sqs increment after writing the array pointer.
		 * Pairs with smp_load_acquire in en_stats.c.
+7 −0
Original line number Diff line number Diff line
@@ -179,6 +179,13 @@ u32 mlx5e_rqt_size(struct mlx5_core_dev *mdev, unsigned int num_channels)
	return min_t(u32, rqt_size, max_cap_rqt_size);
}

#define MLX5E_MAX_RQT_SIZE_ALLOWED_WITH_XOR8_HASH 256

unsigned int mlx5e_rqt_max_num_channels_allowed_for_xor8(void)
{
	return MLX5E_MAX_RQT_SIZE_ALLOWED_WITH_XOR8_HASH / MLX5E_UNIFORM_SPREAD_RQT_FACTOR;
}

void mlx5e_rqt_destroy(struct mlx5e_rqt *rqt)
{
	mlx5_core_destroy_rqt(rqt->mdev, rqt->rqtn);
+1 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ static inline u32 mlx5e_rqt_get_rqtn(struct mlx5e_rqt *rqt)
}

u32 mlx5e_rqt_size(struct mlx5_core_dev *mdev, unsigned int num_channels);
unsigned int mlx5e_rqt_max_num_channels_allowed_for_xor8(void);
int mlx5e_rqt_redirect_direct(struct mlx5e_rqt *rqt, u32 rqn, u32 *vhca_id);
int mlx5e_rqt_redirect_indir(struct mlx5e_rqt *rqt, u32 *rqns, u32 *vhca_ids,
			     unsigned int num_rqns,
+2 −0
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ int mlx5e_selq_init(struct mlx5e_selq *selq, struct mutex *state_lock)

void mlx5e_selq_cleanup(struct mlx5e_selq *selq)
{
	mutex_lock(selq->state_lock);
	WARN_ON_ONCE(selq->is_prepared);

	kvfree(selq->standby);
@@ -67,6 +68,7 @@ void mlx5e_selq_cleanup(struct mlx5e_selq *selq)

	kvfree(selq->standby);
	selq->standby = NULL;
	mutex_unlock(selq->state_lock);
}

void mlx5e_selq_prepare_params(struct mlx5e_selq *selq, struct mlx5e_params *params)
Loading