mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-04 01:49:36 +00:00
IB/mlx4: Add support to RSS hash for inner headers
Support RSS hash for inner headers according to a new flag, MLX4_IB_RX_HASH_INNER provided by the vendor channel. In case the flag is set, RSS hash will be done on the inner headers of VXLAN packets (which are encapsulated). Non-encapsulated packets will be hashed according to the outer headers. Signed-off-by: Guy Levi <guyle@mellanox.com> Reviewed-by: Yishai Hadas <yishaih@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
76a895d9e1
commit
07d84f7b6a
3 changed files with 24 additions and 3 deletions
|
@ -589,6 +589,7 @@ static int mlx4_ib_query_device(struct ib_device *ibdev,
|
|||
if (props->rss_caps.supported_qpts) {
|
||||
resp.rss_caps.rx_hash_function =
|
||||
MLX4_IB_RX_HASH_FUNC_TOEPLITZ;
|
||||
|
||||
resp.rss_caps.rx_hash_fields_mask =
|
||||
MLX4_IB_RX_HASH_SRC_IPV4 |
|
||||
MLX4_IB_RX_HASH_DST_IPV4 |
|
||||
|
@ -598,6 +599,11 @@ static int mlx4_ib_query_device(struct ib_device *ibdev,
|
|||
MLX4_IB_RX_HASH_DST_PORT_TCP |
|
||||
MLX4_IB_RX_HASH_SRC_PORT_UDP |
|
||||
MLX4_IB_RX_HASH_DST_PORT_UDP;
|
||||
|
||||
if (dev->dev->caps.tunnel_offload_mode ==
|
||||
MLX4_TUNNEL_OFFLOAD_MODE_VXLAN)
|
||||
resp.rss_caps.rx_hash_fields_mask |=
|
||||
MLX4_IB_RX_HASH_INNER;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -734,6 +734,20 @@ static int set_qp_rss(struct mlx4_ib_dev *dev, struct mlx4_ib_rss *rss_ctx,
|
|||
return (-EOPNOTSUPP);
|
||||
}
|
||||
|
||||
if (ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_INNER) {
|
||||
if (dev->dev->caps.tunnel_offload_mode ==
|
||||
MLX4_TUNNEL_OFFLOAD_MODE_VXLAN) {
|
||||
/*
|
||||
* Hash according to inner headers if exist, otherwise
|
||||
* according to outer headers.
|
||||
*/
|
||||
rss_ctx->flags |= MLX4_RSS_BY_INNER_HEADERS_IPONLY;
|
||||
} else {
|
||||
pr_debug("RSS Hash for inner headers isn't supported\n");
|
||||
return (-EOPNOTSUPP);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -97,8 +97,8 @@ struct mlx4_ib_create_srq_resp {
|
|||
};
|
||||
|
||||
struct mlx4_ib_create_qp_rss {
|
||||
__u64 rx_hash_fields_mask;
|
||||
__u8 rx_hash_function;
|
||||
__u64 rx_hash_fields_mask; /* Use enum mlx4_ib_rx_hash_fields */
|
||||
__u8 rx_hash_function; /* Use enum mlx4_ib_rx_hash_function_flags */
|
||||
__u8 reserved[7];
|
||||
__u8 rx_hash_key[40];
|
||||
__u32 comp_mask;
|
||||
|
@ -152,7 +152,8 @@ enum mlx4_ib_rx_hash_fields {
|
|||
MLX4_IB_RX_HASH_SRC_PORT_TCP = 1 << 4,
|
||||
MLX4_IB_RX_HASH_DST_PORT_TCP = 1 << 5,
|
||||
MLX4_IB_RX_HASH_SRC_PORT_UDP = 1 << 6,
|
||||
MLX4_IB_RX_HASH_DST_PORT_UDP = 1 << 7
|
||||
MLX4_IB_RX_HASH_DST_PORT_UDP = 1 << 7,
|
||||
MLX4_IB_RX_HASH_INNER = 1ULL << 31,
|
||||
};
|
||||
|
||||
#endif /* MLX4_ABI_USER_H */
|
||||
|
|
Loading…
Reference in a new issue