]> git.droids-corp.org - dpdk.git/commitdiff
common/mlx5: fix RSS key copy to TIR context
authorDekel Peled <dekelp@mellanox.com>
Sun, 29 Mar 2020 09:18:27 +0000 (12:18 +0300)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 21 Apr 2020 11:57:05 +0000 (13:57 +0200)
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: c3aea272eed8 ("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>
drivers/common/mlx5/mlx5_devx_cmds.c
drivers/common/mlx5/mlx5_devx_cmds.h
drivers/net/mlx5/mlx5_rxq.c
drivers/vdpa/mlx5/mlx5_vdpa_steer.c

index 1157a440a8f201f2f04f31a1497bf6ecc85b4007..67c8a8c3a69dc5416437d9252067d79844b27339 100644 (file)
@@ -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);
index 20bb29410fbea4a5c43b6e768ac803b0d6357af4..f7802e6a60dc140d4dd7b730b39ee58444982aa8 100644 (file)
@@ -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;
 };
index 8a6b410effd44c3cfb278f268fa87f43c040fd0e..97ce206275d9130ab9e56f9d8979de638763328a 100644 (file)
@@ -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 =
index 36017f164000ea4de3e97428e355b0dd0c5bec3c..9f8af4ce4a1cd5b17061376c2f2fb45ebe02e6d7 100644 (file)
@@ -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;