From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 73F0AA04EF for ; Sun, 31 May 2020 16:23:32 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 2B2BD1C1E7; Sun, 31 May 2020 16:23:32 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id E64CB1C1E7 for ; Sun, 31 May 2020 16:23:30 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE2 (envelope-from dekelp@mellanox.com) with ESMTPS (AES256-SHA encrypted); 31 May 2020 17:23:27 +0300 Received: from mtl-vdi-280.wap.labs.mlnx. (mtl-vdi-280.wap.labs.mlnx [10.228.134.250]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 04VENRFJ029568; Sun, 31 May 2020 17:23:27 +0300 From: Dekel Peled To: stable@dpdk.org Date: Sun, 31 May 2020 17:23:18 +0300 Message-Id: X-Mailer: git-send-email 1.7.1 Subject: [dpdk-stable] [PATCH 19.11] net/mlx5: fix RSS key copy to TIR context X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" [ upstream commit a4e6ea97a5212f5b59cc65a1293ad23e67ade8fc ] 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") Signed-off-by: Dekel Peled Acked-by: Matan Azrad --- drivers/net/mlx5/mlx5.h | 2 +- drivers/net/mlx5/mlx5_devx_cmds.c | 9 +++------ drivers/net/mlx5/mlx5_rxq.c | 3 ++- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index bbf6ecd..e4af5d4 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -370,7 +370,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; }; diff --git a/drivers/net/mlx5/mlx5_devx_cmds.c b/drivers/net/mlx5/mlx5_devx_cmds.c index e3b02bd..e223ee9 100644 --- a/drivers/net/mlx5/mlx5_devx_cmds.c +++ b/drivers/net/mlx5/mlx5_devx_cmds.c @@ -635,9 +635,8 @@ struct mlx5_devx_obj * { 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) { @@ -660,10 +659,8 @@ struct mlx5_devx_obj * 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); diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index c687752..2b6ab21 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -2516,7 +2516,8 @@ struct mlx5_hrxq * 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 = -- 1.8.3.1