From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by dpdk.org (Postfix) with ESMTP id C86C41F1C for ; Tue, 22 May 2018 13:27:00 +0200 (CEST) Received: by mail-wm0-f68.google.com with SMTP id f8-v6so32574475wmc.4 for ; Tue, 22 May 2018 04:27:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=PWbEaiSLTHyx5YBjA5y4253pM+R4pMcOxyXfWEfdpa4=; b=PU6H5wCMHtE+6r5keM4PYqMlwWa9YHtkxWi2j81oXXon0C2C2CkALh9r3ksf83f+gF +gfyTucbWXM0M02gMv62J7jgJOkxzNoIjoSmPH05BMv/STSjBfRubNmucdoQvXLovrJw QCOZBUyKTVbuB3tSxhUyE6XUUSkGqrFJlPhtWci1FNeIIJXa9uQQxGR9WCHqcrbz37rR 5KVn3Nc0bfZUevhE30VePkHMxQTN30lGwGXEceXVHKdBLSKBbDvaYQPLhMsIQRQ36nRo +Fn6CbDNzWmrCw1SsBy2qhWlivkubI8RMvVFfrArNQEkD+zLh1USoiotKxYK7PLjrD1u sDaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=PWbEaiSLTHyx5YBjA5y4253pM+R4pMcOxyXfWEfdpa4=; b=QNc2KTZpPVGnBewz00yb5evnSDB1VrUttXOARBnzly20ZMLLhrxYX6yeyCvixiHqkT CtoPRshrK3FdDnI2LVqjcOSEBvOVETwHD51rsrF7rquzY1oyBxP+fZvCu4f9YKn3OIF4 R9wucuQverA/w7Z+64A9nGqlneHf1kdti6YxHm/2txvWJBzZ2QIdQXaTlzBh/12ra3d1 qMiSHUTvDiFqE8XsQglYUpkw34Q7+OchrSKq4ZUowxGVF66Oy+XaFiRdTXVUGyKy/bpu V7cG5iWX1CIbiRr1RVVRLCF5mdgH4KtRYGIbe3rIBK9J2Cpz6wY9zagoXI2A9p/lnJ8C KNag== X-Gm-Message-State: ALKqPwerd6vOM/X3nbi8GqR3I7EZ+Sj93e5uT/c0tY3sEA+19K0D1Gx7 0UbMllmexzMHI450p46Y3wGCyw== X-Google-Smtp-Source: AB8JxZowd71BHqC7DynQgMpGWXIgLIzqWQPVMXa/EWWHDKitoJ7TUlTgwHtrhIHL0GmrwShCeI2xug== X-Received: by 2002:a1c:8fd3:: with SMTP id r202-v6mr812540wmd.103.1526988420468; Tue, 22 May 2018 04:27:00 -0700 (PDT) Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id c11-v6sm5753356wrb.57.2018.05.22.04.26.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 May 2018 04:26:59 -0700 (PDT) Date: Tue, 22 May 2018 13:26:44 +0200 From: Adrien Mazarguil To: Shahaf Shuler Cc: Ferruh Yigit , dev@dpdk.org Message-ID: <20180522112533.2785-1-adrien.mazarguil@6wind.com> References: <20180521154829.6297-2-adrien.mazarguil@6wind.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180521154829.6297-2-adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.11.0 Subject: [dpdk-dev] [PATCH] net/mlx4: fix undefined behavior of RSS conversion X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 May 2018 11:27:01 -0000 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 Signed-off-by: Adrien Mazarguil -- 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