common/mlx5: fix RSS key copy to TIR context
In function mlx5_devx_cmd_create_tir(), the 40 bytes of RSS key are
copied in 10 iterations, 4 bytes each time using the MLX5_SET macro.
As result the RSS key is copied into TIR context in swapped byte order.
This patch fixes the issue, using memcpy() to copy the RSS key as is.
The struct member mlx5_devx_tir_attr.rx_hash_toeplitz_key is updated
to byte array type.
Fixes: c3aea272ee
("net/mlx5: create advanced Rx object via DevX")
Cc: stable@dpdk.org
Signed-off-by: Dekel Peled <dekelp@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
This commit is contained in:
parent
40b9e7f65f
commit
a4e6ea97a5
@ -759,9 +759,8 @@ mlx5_devx_cmd_create_tir(struct ibv_context *ctx,
|
||||
{
|
||||
uint32_t in[MLX5_ST_SZ_DW(create_tir_in)] = {0};
|
||||
uint32_t out[MLX5_ST_SZ_DW(create_tir_out)] = {0};
|
||||
void *tir_ctx, *outer, *inner;
|
||||
void *tir_ctx, *outer, *inner, *rss_key;
|
||||
struct mlx5_devx_obj *tir = NULL;
|
||||
int i;
|
||||
|
||||
tir = rte_calloc(__func__, 1, sizeof(*tir), 0);
|
||||
if (!tir) {
|
||||
@ -784,10 +783,8 @@ mlx5_devx_cmd_create_tir(struct ibv_context *ctx,
|
||||
MLX5_SET(tirc, tir_ctx, rx_hash_fn, tir_attr->rx_hash_fn);
|
||||
MLX5_SET(tirc, tir_ctx, self_lb_block, tir_attr->self_lb_block);
|
||||
MLX5_SET(tirc, tir_ctx, transport_domain, tir_attr->transport_domain);
|
||||
for (i = 0; i < 10; i++) {
|
||||
MLX5_SET(tirc, tir_ctx, rx_hash_toeplitz_key[i],
|
||||
tir_attr->rx_hash_toeplitz_key[i]);
|
||||
}
|
||||
rss_key = MLX5_ADDR_OF(tirc, tir_ctx, rx_hash_toeplitz_key);
|
||||
memcpy(rss_key, tir_attr->rx_hash_toeplitz_key, MLX5_RSS_HASH_KEY_LEN);
|
||||
outer = MLX5_ADDR_OF(tirc, tir_ctx, rx_hash_field_selector_outer);
|
||||
MLX5_SET(rx_hash_field_select, outer, l3_prot_type,
|
||||
tir_attr->rx_hash_field_selector_outer.l3_prot_type);
|
||||
|
@ -183,7 +183,7 @@ struct mlx5_devx_tir_attr {
|
||||
uint32_t rx_hash_fn:4;
|
||||
uint32_t self_lb_block:2;
|
||||
uint32_t transport_domain:24;
|
||||
uint32_t rx_hash_toeplitz_key[10];
|
||||
uint8_t rx_hash_toeplitz_key[MLX5_RSS_HASH_KEY_LEN];
|
||||
struct mlx5_rx_hash_field_select rx_hash_field_selector_outer;
|
||||
struct mlx5_rx_hash_field_select rx_hash_field_selector_inner;
|
||||
};
|
||||
|
@ -2519,7 +2519,8 @@ mlx5_hrxq_new(struct rte_eth_dev *dev,
|
||||
tir_attr.transport_domain = priv->sh->td->id;
|
||||
else
|
||||
tir_attr.transport_domain = priv->sh->tdn;
|
||||
memcpy(tir_attr.rx_hash_toeplitz_key, rss_key, rss_key_len);
|
||||
memcpy(tir_attr.rx_hash_toeplitz_key, rss_key,
|
||||
MLX5_RSS_HASH_KEY_LEN);
|
||||
tir_attr.indirect_table = ind_tbl->rqt->id;
|
||||
if (dev->data->dev_conf.lpbk_mode)
|
||||
tir_attr.self_lb_block =
|
||||
|
@ -144,10 +144,16 @@ mlx5_vdpa_rss_flows_create(struct mlx5_vdpa_priv *priv)
|
||||
.transport_domain = priv->td->id,
|
||||
.indirect_table = priv->steer.rqt->id,
|
||||
.rx_hash_symmetric = 1,
|
||||
.rx_hash_toeplitz_key = { 0x2cc681d1, 0x5bdbf4f7, 0xfca28319,
|
||||
0xdb1a3e94, 0x6b9e38d9, 0x2c9c03d1,
|
||||
0xad9944a7, 0xd9563d59, 0x063c25f3,
|
||||
0xfc1fdc2a },
|
||||
.rx_hash_toeplitz_key = { 0x2c, 0xc6, 0x81, 0xd1,
|
||||
0x5b, 0xdb, 0xf4, 0xf7,
|
||||
0xfc, 0xa2, 0x83, 0x19,
|
||||
0xdb, 0x1a, 0x3e, 0x94,
|
||||
0x6b, 0x9e, 0x38, 0xd9,
|
||||
0x2c, 0x9c, 0x03, 0xd1,
|
||||
0xad, 0x99, 0x44, 0xa7,
|
||||
0xd9, 0x56, 0x3d, 0x59,
|
||||
0x06, 0x3c, 0x25, 0xf3,
|
||||
0xfc, 0x1f, 0xdc, 0x2a },
|
||||
};
|
||||
struct {
|
||||
size_t size;
|
||||
|
Loading…
Reference in New Issue
Block a user