Skip to content

Commit b6b912e

Browse files
Yevgeny Petrilindavem330
authored andcommitted
mlx4_en: Using real number of rings as RSS map size
There is no point in using more QPs then actual number of receive rings. If the RSS function for two streams gives the same result modulo number of rings, they will arrive to the same RX ring anyway. Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent a35ee54 commit b6b912e

File tree

4 files changed

+16
-41
lines changed

4 files changed

+16
-41
lines changed

drivers/net/mlx4/en_main.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,9 @@ static void *mlx4_en_add(struct mlx4_dev *dev)
218218
mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_ETH) {
219219
mlx4_info(mdev, "Using %d tx rings for port:%d\n",
220220
mdev->profile.prof[i].tx_ring_num, i);
221-
mdev->profile.prof[i].rx_ring_num =
222-
min_t(int, dev->caps.num_comp_vectors, MAX_RX_RINGS);
221+
mdev->profile.prof[i].rx_ring_num = min_t(int,
222+
roundup_pow_of_two(dev->caps.num_comp_vectors),
223+
MAX_RX_RINGS);
223224
mlx4_info(mdev, "Defaulting to %d rx rings for port:%d\n",
224225
mdev->profile.prof[i].rx_ring_num, i);
225226
}

drivers/net/mlx4/en_netdev.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,9 +1011,6 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
10111011
if (err)
10121012
goto out;
10131013

1014-
/* Populate Rx default RSS mappings */
1015-
mlx4_en_set_default_rss_map(priv, &priv->rss_map, priv->rx_ring_num *
1016-
RSS_FACTOR, priv->rx_ring_num);
10171014
/* Allocate page for receive rings */
10181015
err = mlx4_alloc_hwq_res(mdev->dev, &priv->res,
10191016
MLX4_EN_PAGE_SIZE, MLX4_EN_PAGE_SIZE);

drivers/net/mlx4/en_rx.c

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -835,23 +835,6 @@ void mlx4_en_calc_rx_buf(struct net_device *dev)
835835

836836
/* RSS related functions */
837837

838-
/* Calculate rss size and map each entry in rss table to rx ring */
839-
void mlx4_en_set_default_rss_map(struct mlx4_en_priv *priv,
840-
struct mlx4_en_rss_map *rss_map,
841-
int num_entries, int num_rings)
842-
{
843-
int i;
844-
845-
rss_map->size = roundup_pow_of_two(num_entries);
846-
en_dbg(DRV, priv, "Setting default RSS map of %d entires\n",
847-
rss_map->size);
848-
849-
for (i = 0; i < rss_map->size; i++) {
850-
rss_map->map[i] = i % num_rings;
851-
en_dbg(DRV, priv, "Entry %d ---> ring %d\n", i, rss_map->map[i]);
852-
}
853-
}
854-
855838
static int mlx4_en_config_rss_qp(struct mlx4_en_priv *priv,
856839
int qpn, int srqn, int cqn,
857840
enum mlx4_qp_state *state,
@@ -902,16 +885,17 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv)
902885
int good_qps = 0;
903886

904887
en_dbg(DRV, priv, "Configuring rss steering\n");
905-
err = mlx4_qp_reserve_range(mdev->dev, rss_map->size,
906-
rss_map->size, &rss_map->base_qpn);
888+
err = mlx4_qp_reserve_range(mdev->dev, priv->rx_ring_num,
889+
priv->rx_ring_num,
890+
&rss_map->base_qpn);
907891
if (err) {
908-
en_err(priv, "Failed reserving %d qps\n", rss_map->size);
892+
en_err(priv, "Failed reserving %d qps\n", priv->rx_ring_num);
909893
return err;
910894
}
911895

912-
for (i = 0; i < rss_map->size; i++) {
913-
cqn = priv->rx_ring[rss_map->map[i]].cqn;
914-
srqn = priv->rx_ring[rss_map->map[i]].srq.srqn;
896+
for (i = 0; i < priv->rx_ring_num; i++) {
897+
cqn = priv->rx_ring[i].cqn;
898+
srqn = priv->rx_ring[i].srq.srqn;
915899
qpn = rss_map->base_qpn + i;
916900
err = mlx4_en_config_rss_qp(priv, qpn, srqn, cqn,
917901
&rss_map->state[i],
@@ -940,7 +924,7 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv)
940924

941925
ptr = ((void *) &context) + 0x3c;
942926
rss_context = (struct mlx4_en_rss_context *) ptr;
943-
rss_context->base_qpn = cpu_to_be32(ilog2(rss_map->size) << 24 |
927+
rss_context->base_qpn = cpu_to_be32(ilog2(priv->rx_ring_num) << 24 |
944928
(rss_map->base_qpn));
945929
rss_context->default_qpn = cpu_to_be32(rss_map->base_qpn);
946930
rss_context->hash_fn = rss_xor & 0x3;
@@ -967,7 +951,7 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv)
967951
mlx4_qp_remove(mdev->dev, &rss_map->qps[i]);
968952
mlx4_qp_free(mdev->dev, &rss_map->qps[i]);
969953
}
970-
mlx4_qp_release_range(mdev->dev, rss_map->base_qpn, rss_map->size);
954+
mlx4_qp_release_range(mdev->dev, rss_map->base_qpn, priv->rx_ring_num);
971955
return err;
972956
}
973957

@@ -983,13 +967,13 @@ void mlx4_en_release_rss_steer(struct mlx4_en_priv *priv)
983967
mlx4_qp_free(mdev->dev, &rss_map->indir_qp);
984968
mlx4_qp_release_range(mdev->dev, priv->base_qpn, 1);
985969

986-
for (i = 0; i < rss_map->size; i++) {
970+
for (i = 0; i < priv->rx_ring_num; i++) {
987971
mlx4_qp_modify(mdev->dev, NULL, rss_map->state[i],
988972
MLX4_QP_STATE_RST, NULL, 0, 0, &rss_map->qps[i]);
989973
mlx4_qp_remove(mdev->dev, &rss_map->qps[i]);
990974
mlx4_qp_free(mdev->dev, &rss_map->qps[i]);
991975
}
992-
mlx4_qp_release_range(mdev->dev, rss_map->base_qpn, rss_map->size);
976+
mlx4_qp_release_range(mdev->dev, rss_map->base_qpn, priv->rx_ring_num);
993977
}
994978

995979

drivers/net/mlx4/mlx4_en.h

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,6 @@
9595
#define MLX4_EN_PAGE_SIZE (1 << MLX4_EN_PAGE_SHIFT)
9696
#define MAX_TX_RINGS 16
9797
#define MAX_RX_RINGS 16
98-
#define MAX_RSS_MAP_SIZE 64
99-
#define RSS_FACTOR 2
10098
#define TXBB_SIZE 64
10199
#define HEADROOM (2048 / TXBB_SIZE + 1)
102100
#define STAMP_STRIDE 64
@@ -377,11 +375,9 @@ struct mlx4_en_dev {
377375

378376

379377
struct mlx4_en_rss_map {
380-
int size;
381378
int base_qpn;
382-
u16 map[MAX_RSS_MAP_SIZE];
383-
struct mlx4_qp qps[MAX_RSS_MAP_SIZE];
384-
enum mlx4_qp_state state[MAX_RSS_MAP_SIZE];
379+
struct mlx4_qp qps[MAX_RX_RINGS];
380+
enum mlx4_qp_state state[MAX_RX_RINGS];
385381
struct mlx4_qp indir_qp;
386382
enum mlx4_qp_state indir_state;
387383
};
@@ -555,9 +551,6 @@ int mlx4_en_map_buffer(struct mlx4_buf *buf);
555551
void mlx4_en_unmap_buffer(struct mlx4_buf *buf);
556552

557553
void mlx4_en_calc_rx_buf(struct net_device *dev);
558-
void mlx4_en_set_default_rss_map(struct mlx4_en_priv *priv,
559-
struct mlx4_en_rss_map *rss_map,
560-
int num_entries, int num_rings);
561554
int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv);
562555
void mlx4_en_release_rss_steer(struct mlx4_en_priv *priv);
563556
int mlx4_en_free_tx_buf(struct net_device *dev, struct mlx4_en_tx_ring *ring);

0 commit comments

Comments
 (0)