DPDK patches and discussions
 help / color / mirror / Atom feed
From: Adrien Mazarguil <adrien.mazarguil@6wind.com>
To: Shahaf Shuler <shahafs@mellanox.com>
Cc: Ferruh Yigit <ferruh.yigit@intel.com>, dev@dpdk.org
Subject: [dpdk-dev] [PATCH] net/mlx4: fix undefined behavior of RSS conversion
Date: Tue, 22 May 2018 13:26:44 +0200	[thread overview]
Message-ID: <20180522112533.2785-1-adrien.mazarguil@6wind.com> (raw)
In-Reply-To: <20180521154829.6297-2-adrien.mazarguil@6wind.com>

As reported by ICC, an array initializer that uses values found in the
array being initialized, although semantically correct (GCC and clang do
not complain and generate correct code), results in undefined behavior
since initialization order is itself undefined.

This patch restores the static keyword and initializes array entries with
constant expressions as a safety measure.

Fixes: f76ccd763422 ("net/mlx4: refactor RSS conversion functions")

Reported-by: Ferruh Yigit <ferruh.yigit@intel.com>
Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>

--

Shahaf, Ferruh, please remove the "Note the loss of the [...]" paragraph of
the original commit if this patch gets squashed in it, as it is no longer
relevant in that case.
---
 drivers/net/mlx4/mlx4_flow.c | 38 ++++++++++++++++++++++----------------
 1 file changed, 22 insertions(+), 16 deletions(-)

diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c
index ddb7108dc..b40e7e5c3 100644
--- a/drivers/net/mlx4/mlx4_flow.c
+++ b/drivers/net/mlx4/mlx4_flow.c
@@ -103,6 +103,12 @@ mlx4_conv_rss_types(struct priv *priv, uint64_t types, int verbs_to_dpdk)
 		TCP, UDP,
 		IPV4_TCP, IPV4_UDP, IPV6_TCP, IPV6_TCP_1, IPV6_UDP, IPV6_UDP_1,
 	};
+	enum {
+		VERBS_IPV4 = IBV_RX_HASH_SRC_IPV4 | IBV_RX_HASH_DST_IPV4,
+		VERBS_IPV6 = IBV_RX_HASH_SRC_IPV6 | IBV_RX_HASH_DST_IPV6,
+		VERBS_TCP = IBV_RX_HASH_SRC_PORT_TCP | IBV_RX_HASH_DST_PORT_TCP,
+		VERBS_UDP = IBV_RX_HASH_SRC_PORT_UDP | IBV_RX_HASH_DST_PORT_UDP,
+	};
 	static const uint64_t dpdk[] = {
 		[INNER] = 0,
 		[IPV4] = ETH_RSS_IPV4,
@@ -121,23 +127,23 @@ mlx4_conv_rss_types(struct priv *priv, uint64_t types, int verbs_to_dpdk)
 		[IPV6_UDP] = ETH_RSS_NONFRAG_IPV6_UDP,
 		[IPV6_UDP_1] = ETH_RSS_IPV6_UDP_EX,
 	};
-	const uint64_t verbs[RTE_DIM(dpdk)] = {
+	static const uint64_t verbs[RTE_DIM(dpdk)] = {
 		[INNER] = IBV_RX_HASH_INNER,
-		[IPV4] = IBV_RX_HASH_SRC_IPV4 | IBV_RX_HASH_DST_IPV4,
-		[IPV4_1] = verbs[IPV4],
-		[IPV4_2] = verbs[IPV4],
-		[IPV6] = IBV_RX_HASH_SRC_IPV6 | IBV_RX_HASH_DST_IPV6,
-		[IPV6_1] = verbs[IPV6],
-		[IPV6_2] = verbs[IPV6],
-		[IPV6_3] = verbs[IPV6],
-		[TCP] = IBV_RX_HASH_SRC_PORT_TCP | IBV_RX_HASH_DST_PORT_TCP,
-		[UDP] = IBV_RX_HASH_SRC_PORT_UDP | IBV_RX_HASH_DST_PORT_UDP,
-		[IPV4_TCP] = verbs[IPV4] | verbs[TCP],
-		[IPV4_UDP] = verbs[IPV4] | verbs[UDP],
-		[IPV6_TCP] = verbs[IPV6] | verbs[TCP],
-		[IPV6_TCP_1] = verbs[IPV6_TCP],
-		[IPV6_UDP] = verbs[IPV6] | verbs[UDP],
-		[IPV6_UDP_1] = verbs[IPV6_UDP],
+		[IPV4] = VERBS_IPV4,
+		[IPV4_1] = VERBS_IPV4,
+		[IPV4_2] = VERBS_IPV4,
+		[IPV6] = VERBS_IPV6,
+		[IPV6_1] = VERBS_IPV6,
+		[IPV6_2] = VERBS_IPV6,
+		[IPV6_3] = VERBS_IPV6,
+		[TCP] = VERBS_TCP,
+		[UDP] = VERBS_UDP,
+		[IPV4_TCP] = VERBS_IPV4 | VERBS_TCP,
+		[IPV4_UDP] = VERBS_IPV4 | VERBS_UDP,
+		[IPV6_TCP] = VERBS_IPV6 | VERBS_TCP,
+		[IPV6_TCP_1] = VERBS_IPV6 | VERBS_TCP,
+		[IPV6_UDP] = VERBS_IPV6 | VERBS_UDP,
+		[IPV6_UDP_1] = VERBS_IPV6 | VERBS_UDP,
 	};
 	const uint64_t *in = verbs_to_dpdk ? verbs : dpdk;
 	const uint64_t *out = verbs_to_dpdk ? dpdk : verbs;
-- 
2.11.0

  parent reply	other threads:[~2018-05-22 11:27 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-15 15:51 [dpdk-dev] [PATCH 1/2] net/mlx4: fix inadequate default in RSS converter Adrien Mazarguil
2018-05-15 15:51 ` [dpdk-dev] [PATCH 2/2] net/mlx4: refactor RSS conversion functions Adrien Mazarguil
2018-05-17 17:46   ` Ophir Munk
2018-05-18  9:49     ` Adrien Mazarguil
2018-05-21 10:59       ` Shahaf Shuler
2018-05-21 12:23         ` Adrien Mazarguil
2018-05-21 15:50 ` [dpdk-dev] [PATCH v2 1/2] net/mlx4: fix inadequate default in RSS converter Adrien Mazarguil
2018-05-21 15:50   ` [dpdk-dev] [PATCH v2 2/2] net/mlx4: refactor RSS conversion functions Adrien Mazarguil
2018-05-22  9:41     ` Ferruh Yigit
2018-05-22  9:58       ` Adrien Mazarguil
2018-05-22 11:26     ` Adrien Mazarguil [this message]
2018-05-22 13:01       ` [dpdk-dev] [PATCH] net/mlx4: fix undefined behavior of RSS conversion Ferruh Yigit
2018-05-22 13:21         ` Adrien Mazarguil
2018-05-22  7:28   ` [dpdk-dev] [PATCH v2 1/2] net/mlx4: fix inadequate default in RSS converter Shahaf Shuler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180522112533.2785-1-adrien.mazarguil@6wind.com \
    --to=adrien.mazarguil@6wind.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=shahafs@mellanox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).