IB/mlx5: Expose RSS related capabilities
Expose RSS related capabilities on both IB and vendor channels. In addition to the IB capabilities the driver reports some extra capabilities on its vendor channel: - Bit mask of the supported types of hash functions. - Bit mask of the supported RX fields that can participate in the RX hashing. Those capabilities are applicable only when the link layer is Ethernet. Signed-off-by: Yishai Hadas <yishaih@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
47adf2f4f5
commit
31f69a82b4
|
@ -531,6 +531,26 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
|
||||||
resp.response_length += sizeof(resp.tso_caps);
|
resp.response_length += sizeof(resp.tso_caps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (field_avail(typeof(resp), rss_caps, uhw->outlen)) {
|
||||||
|
resp.rss_caps.rx_hash_function =
|
||||||
|
MLX5_RX_HASH_FUNC_TOEPLITZ;
|
||||||
|
resp.rss_caps.rx_hash_fields_mask =
|
||||||
|
MLX5_RX_HASH_SRC_IPV4 |
|
||||||
|
MLX5_RX_HASH_DST_IPV4 |
|
||||||
|
MLX5_RX_HASH_SRC_IPV6 |
|
||||||
|
MLX5_RX_HASH_DST_IPV6 |
|
||||||
|
MLX5_RX_HASH_SRC_PORT_TCP |
|
||||||
|
MLX5_RX_HASH_DST_PORT_TCP |
|
||||||
|
MLX5_RX_HASH_SRC_PORT_UDP |
|
||||||
|
MLX5_RX_HASH_DST_PORT_UDP;
|
||||||
|
resp.response_length += sizeof(resp.rss_caps);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (field_avail(typeof(resp), tso_caps, uhw->outlen))
|
||||||
|
resp.response_length += sizeof(resp.tso_caps);
|
||||||
|
if (field_avail(typeof(resp), rss_caps, uhw->outlen))
|
||||||
|
resp.response_length += sizeof(resp.rss_caps);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MLX5_CAP_GEN(mdev, ipoib_basic_offloads)) {
|
if (MLX5_CAP_GEN(mdev, ipoib_basic_offloads)) {
|
||||||
|
@ -594,6 +614,17 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
|
||||||
if (!mlx5_core_is_pf(mdev))
|
if (!mlx5_core_is_pf(mdev))
|
||||||
props->device_cap_flags |= IB_DEVICE_VIRTUAL_FUNCTION;
|
props->device_cap_flags |= IB_DEVICE_VIRTUAL_FUNCTION;
|
||||||
|
|
||||||
|
if (mlx5_ib_port_link_layer(ibdev, 1) ==
|
||||||
|
IB_LINK_LAYER_ETHERNET) {
|
||||||
|
props->rss_caps.max_rwq_indirection_tables =
|
||||||
|
1 << MLX5_CAP_GEN(dev->mdev, log_max_rqt);
|
||||||
|
props->rss_caps.max_rwq_indirection_table_size =
|
||||||
|
1 << MLX5_CAP_GEN(dev->mdev, log_max_rqt_size);
|
||||||
|
props->rss_caps.supported_qpts = 1 << IB_QPT_RAW_PACKET;
|
||||||
|
props->max_wq_type_rq =
|
||||||
|
1 << MLX5_CAP_GEN(dev->mdev, log_max_rq);
|
||||||
|
}
|
||||||
|
|
||||||
if (uhw->outlen) {
|
if (uhw->outlen) {
|
||||||
err = ib_copy_to_udata(uhw, &resp, resp.response_length);
|
err = ib_copy_to_udata(uhw, &resp, resp.response_length);
|
||||||
|
|
||||||
|
|
|
@ -121,10 +121,17 @@ struct mlx5_ib_tso_caps {
|
||||||
__u32 supported_qpts;
|
__u32 supported_qpts;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct mlx5_ib_rss_caps {
|
||||||
|
__u64 rx_hash_fields_mask; /* enum mlx5_rx_hash_fields */
|
||||||
|
__u8 rx_hash_function; /* enum mlx5_rx_hash_function_flags */
|
||||||
|
__u8 reserved[7];
|
||||||
|
};
|
||||||
|
|
||||||
struct mlx5_ib_query_device_resp {
|
struct mlx5_ib_query_device_resp {
|
||||||
__u32 comp_mask;
|
__u32 comp_mask;
|
||||||
__u32 response_length;
|
__u32 response_length;
|
||||||
struct mlx5_ib_tso_caps tso_caps;
|
struct mlx5_ib_tso_caps tso_caps;
|
||||||
|
struct mlx5_ib_rss_caps rss_caps;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mlx5_ib_create_cq {
|
struct mlx5_ib_create_cq {
|
||||||
|
|
Loading…
Reference in New Issue