forked from Minki/linux
IB/mlx5: Add support for RSS on the inner packet
Some user space application would like to do RSS on the inner packet fields instead on the outer. When MLX5_RX_HASH_INNER is set with one or more of the other hash fields, then the RSS will be done using the inner packet. Signed-off-by: Maor Gottlieb <maorg@mellanox.com> Reviewed-by: Mark Bloch <markb@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
f95ef6cbae
commit
309fa3470f
@ -1403,6 +1403,12 @@ static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (ucmd.rx_hash_fields_mask & MLX5_RX_HASH_INNER &&
|
||||
!(ucmd.flags & MLX5_QP_FLAG_TUNNEL_OFFLOADS)) {
|
||||
mlx5_ib_dbg(dev, "Tunnel offloads must be set for inner RSS\n");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
err = ib_copy_to_udata(udata, &resp, min_resp_len);
|
||||
if (err) {
|
||||
mlx5_ib_dbg(dev, "copy failed\n");
|
||||
@ -1426,6 +1432,11 @@ static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
|
||||
if (ucmd.flags & MLX5_QP_FLAG_TUNNEL_OFFLOADS)
|
||||
MLX5_SET(tirc, tirc, tunneled_offload_en, 1);
|
||||
|
||||
if (ucmd.rx_hash_fields_mask & MLX5_RX_HASH_INNER)
|
||||
hfso = MLX5_ADDR_OF(tirc, tirc, rx_hash_field_selector_inner);
|
||||
else
|
||||
hfso = MLX5_ADDR_OF(tirc, tirc, rx_hash_field_selector_outer);
|
||||
|
||||
switch (ucmd.rx_hash_function) {
|
||||
case MLX5_RX_HASH_FUNC_TOEPLITZ:
|
||||
{
|
||||
|
@ -303,7 +303,9 @@ enum mlx5_rx_hash_fields {
|
||||
MLX5_RX_HASH_SRC_PORT_TCP = 1 << 4,
|
||||
MLX5_RX_HASH_DST_PORT_TCP = 1 << 5,
|
||||
MLX5_RX_HASH_SRC_PORT_UDP = 1 << 6,
|
||||
MLX5_RX_HASH_DST_PORT_UDP = 1 << 7
|
||||
MLX5_RX_HASH_DST_PORT_UDP = 1 << 7,
|
||||
/* Save bits for future fields */
|
||||
MLX5_RX_HASH_INNER = 1 << 31
|
||||
};
|
||||
|
||||
struct mlx5_ib_create_qp_rss {
|
||||
|
Loading…
Reference in New Issue
Block a user