Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 432609a4 authored by Gal Pressman's avatar Gal Pressman Committed by Saeed Mahameed
Browse files

net/mlx5e: Move and optimize query out of buffer function



Move "query queue counter out of buffer" helper function out of
qp.c to en_main.c, since mlx5e netdev driver is the only one to use it.

Also allocate the output buffer on the stack instead of the heap, to reduce
number of heap allocs on update_stats work.

Signed-off-by: default avatarGal Pressman <galp@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
Cc: kernel-team@fb.com
parent 0883b4f4
Loading
Loading
Loading
Loading
+7 −2
Original line number Original line Diff line number Diff line
@@ -289,12 +289,17 @@ static void mlx5e_update_pport_counters(struct mlx5e_priv *priv)
static void mlx5e_update_q_counter(struct mlx5e_priv *priv)
static void mlx5e_update_q_counter(struct mlx5e_priv *priv)
{
{
	struct mlx5e_qcounter_stats *qcnt = &priv->stats.qcnt;
	struct mlx5e_qcounter_stats *qcnt = &priv->stats.qcnt;
	u32 out[MLX5_ST_SZ_DW(query_q_counter_out)];
	int err;


	if (!priv->q_counter)
	if (!priv->q_counter)
		return;
		return;


	mlx5_core_query_out_of_buffer(priv->mdev, priv->q_counter,
	err = mlx5_core_query_q_counter(priv->mdev, priv->q_counter, 0, out, sizeof(out));
				      &qcnt->rx_out_of_buffer);
	if (err)
		return;

	qcnt->rx_out_of_buffer = MLX5_GET(query_q_counter_out, out, out_of_buffer);
}
}


static void mlx5e_update_pcie_counters(struct mlx5e_priv *priv)
static void mlx5e_update_pcie_counters(struct mlx5e_priv *priv)
+0 −20
Original line number Original line Diff line number Diff line
@@ -518,23 +518,3 @@ int mlx5_core_query_q_counter(struct mlx5_core_dev *dev, u16 counter_id,
	return mlx5_cmd_exec(dev, in, sizeof(in), out, out_size);
	return mlx5_cmd_exec(dev, in, sizeof(in), out, out_size);
}
}
EXPORT_SYMBOL_GPL(mlx5_core_query_q_counter);
EXPORT_SYMBOL_GPL(mlx5_core_query_q_counter);

int mlx5_core_query_out_of_buffer(struct mlx5_core_dev *dev, u16 counter_id,
				  u32 *out_of_buffer)
{
	int outlen = MLX5_ST_SZ_BYTES(query_q_counter_out);
	void *out;
	int err;

	out = kvzalloc(outlen, GFP_KERNEL);
	if (!out)
		return -ENOMEM;

	err = mlx5_core_query_q_counter(dev, counter_id, 0, out, outlen);
	if (!err)
		*out_of_buffer = MLX5_GET(query_q_counter_out, out,
					  out_of_buffer);

	kfree(out);
	return err;
}
+0 −2
Original line number Original line Diff line number Diff line
@@ -569,8 +569,6 @@ int mlx5_core_alloc_q_counter(struct mlx5_core_dev *dev, u16 *counter_id);
int mlx5_core_dealloc_q_counter(struct mlx5_core_dev *dev, u16 counter_id);
int mlx5_core_dealloc_q_counter(struct mlx5_core_dev *dev, u16 counter_id);
int mlx5_core_query_q_counter(struct mlx5_core_dev *dev, u16 counter_id,
int mlx5_core_query_q_counter(struct mlx5_core_dev *dev, u16 counter_id,
			      int reset, void *out, int out_size);
			      int reset, void *out, int out_size);
int mlx5_core_query_out_of_buffer(struct mlx5_core_dev *dev, u16 counter_id,
				  u32 *out_of_buffer);


static inline const char *mlx5_qp_type_str(int type)
static inline const char *mlx5_qp_type_str(int type)
{
{