From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr60061.outbound.protection.outlook.com [40.107.6.61]) by dpdk.org (Postfix) with ESMTP id DE2151B1BB; Tue, 9 Jan 2018 18:39:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=2IwVsTtNpADoosHbO0YBlV1O+S280G10VHR88TaMjiQ=; b=AiSVdzpsbIx+n+FsONcqQ8IaxNBeypEzTcUG3Ghj8JgqjzfFdyhF7nlSCQ/Zy1ZR9UIbE98M9GoAZ7ptnvhNqSHIFi/X+BKBmU1+WvuSoZOebVsNUXtwruu5ZGnrcTUtOsWQ642fbNQFLvY90Ps5PdXrq96GS86NYLOAtTuYgbo= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; Received: from mellanox.com (209.116.155.178) by DB6PR0501MB2038.eurprd05.prod.outlook.com (2603:10a6:4:6::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Tue, 9 Jan 2018 17:39:04 +0000 From: Yongseok Koh To: adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com Cc: dev@dpdk.org, Yongseok Koh , stable@dpdk.org Date: Tue, 9 Jan 2018 09:38:50 -0800 Message-Id: <20180109173850.17707-1-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180108220645.13493-1-yskoh@mellanox.com> References: <20180108220645.13493-1-yskoh@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: DM5PR13CA0025.namprd13.prod.outlook.com (2603:10b6:3:7b::11) To DB6PR0501MB2038.eurprd05.prod.outlook.com (2603:10a6:4:6::20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: e4e28a2e-934f-4287-a448-08d55787e16e X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:DB6PR0501MB2038; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 3:rF0ZBsfnlinxvfHWH+50Eod1RN0AlKThVqBIBLNr+ZwHPFBO09wlY0r5xg0Lua2ACIf06ZCyM+6jcfLW/70TQ+vDCtXSUG7mOgm1L1/hRoVwcAKLskZ0++JUgVpbuWTsFQ57vPX7w1idD/GOwrqFCEbnnCgS1uHt/h7jcLfwhHLwfDkVEaEoxSl+d2SP41mh9DUjkm9+U1c1HQkpZuf/2+aLWmolSXCAm8yaDnl1AYqnSwdNqe8up3MenbTOGtoE; 25:xi0A0dpJL55reRjzMWH5Ejln3VtD3CK5vpq+LPl+jAOKG1pmuk0Jjs1sh5YugcyvlY2xawOjtpU5I9qbiNbX9qmPndLjCuIag62B0Mu9HSzLYCfKK/zxdx+U23EVBnf2ZYLsUvLMoZI5btiJ0lemG8mWk31ZXj0IELWH/iQbCu+sC526zPumWPwxmEU0/c4kyyIrZGR8ZTX2i5DSddu1VQuxC0ImemnpEDkg3Kp99HHx3FcAUt1FsdXsIgOncBy8joCr7KAmacxtooYrFKrVsf5n9CHOhfohlN6Z3uGFoN+2nOOluUhfh2RAJjUl50dTDgasJPqRPIU072x95Km71w==; 31:zlI0odjylya2RK3iDc+8Btz65sChHDIe3g6kxaotNr8axUajwbtQuouX9bt0QhXlVt8B7J16UEzzqlx1g75km4k03WJQOn/1X3F+WC/wZu+i4qhwWdwl+AyZ7r9HvrnmgE/LdqNKH4qzuXxsxOk/Gy7h1kjns7J4KpsKZPT5dmtYwLSLyPwHtTUXZyG6zap3dHN2+nomMEnwzgX3Jads0v3lTJAp/8dGVC6AJg/4RAc= X-MS-TrafficTypeDiagnostic: DB6PR0501MB2038: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 20:M/NFAxgOWjyS+G9duORpkBZxAZLqcD/8mftm6UgvPNAvKE2aFLwgPYQCYyFEtHO+bxVs/oe6pOGJ9bT7enGCD4Z0Och6jY8eQ7hVoDhj4fGK1wuEH12NOWZd2/Hf2vkSxq/Cy5zCqU4cTGSl473BKQcpK+Uvt7HfHK51/F5Eo4bwj9A6grCqkUMpYjfKKEEOAt5n1maPrfpk5HifRiWWQ19ITksBg5mf4nBMd+/MEcApidH8VbdBBPvXtYsZNbHG7c7qlSEQUI6QHwVLZlgkrbQk9En7Ob9BDNvjmqzCU6xZ7b2OhkhI5X8i19K/GujddckrnrlEDh//Iast/4nwTr8fO5Z12VPMOnYDevsNwucEbmqPU1ui/JKS9lOequax6MOljr8FuRo0G6yy73UaZ5ruBMGEpSrhngavVfMrneewbvo6GAiaqjGyMSpeA9yDS1GKUF4nMwpNzN65Kt0eLfVJzRP3ZFPeHe/UVU7iyrwidsfMFzjoWPd/p9Vwp4Sh; 4:N8u6aJI9Z1TPlEzMKPlenp9E0Uw33S513K3HbN62S+mtneaZSIe9Qa/uJTNACzGqUs7pVx4YGJMjFVXyr2oV0E0oRihP12SPPda1/SWtXzckmdLV5QYYCWhbd75dbjFKrql8p/jewU4id1IhcANSDn/AW+rC8H7RQBcgeZoqnglNEQuegOHUViwSm5lZeLUXN61mWD5iT+o3F2071oSfa5RRxObnobl8l6MzVyX6e9LHBv3+7vRjKjt5Bpe1Uj2FXIxUrGAUuWtqg1Tv0Flf3g== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(5005006)(8121501046)(10201501046)(93006095)(93001095)(3002001)(3231023)(944501075)(6055026)(6041268)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(6072148)(201708071742011); SRVR:DB6PR0501MB2038; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:DB6PR0501MB2038; X-Forefront-PRVS: 0547116B72 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(396003)(39380400002)(376002)(39860400002)(366004)(199004)(189003)(97736004)(7696005)(55016002)(51416003)(52116002)(21086003)(4326008)(5660300001)(2950100002)(106356001)(316002)(25786009)(7736002)(305945005)(86362001)(76176011)(105586002)(6666003)(1076002)(81156014)(59450400001)(66066001)(48376002)(386003)(50226002)(6116002)(3846002)(16526018)(53936002)(8936002)(81166006)(36756003)(68736007)(47776003)(16586007)(2906002)(69596002)(50466002)(478600001)(8676002)(309714004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0501MB2038; H:mellanox.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0501MB2038; 23:eKDbcWO0TqqKMklIVoMQ7Fl0PaYCpwlScwiAs5K?= =?us-ascii?Q?+slEzutxdVyteJkG0sK5m+WHqJde1Z27l173c7qk0bmmPmaeSMkGZpovCRXx?= =?us-ascii?Q?TlrTM4j/9mZwEVPhgpiNzrBAPRRMllryhrcnwAXG2NrqGuqsEpCwaw1/zjwe?= =?us-ascii?Q?Rja3VwEP08tfJK5Y9B/34KkWxqib5Te2bGRHvYskX+bxE2MI9CpO8mCOOH/X?= =?us-ascii?Q?lPma/sGLc/6mOnZpiqPw7wJWY6tlWvUQTAQLEuluNawY/im3ZPOTnjuCsqYv?= =?us-ascii?Q?njUp1HDVwNVdJDhRlIKaLabfTakeQ7kqNXVlMBgeer0h8CkeGH1G7ZN2Yvp3?= =?us-ascii?Q?bpsmr+1LzffLQXAxzfg+84+uUbBq0lgod01KZzmDQH7ChP1p5TLPb6iZ2+70?= =?us-ascii?Q?B5sKz/Jy/6RamfQS0Skge4UnRUSXwIXrTVHqUfwcXZw26rft5941K3UynAkU?= =?us-ascii?Q?eJc1yDiLXN+H4OTGJxkJChqommNpRH9lqowCu9hZmiO5tYxZyOkzeh2aZt7r?= =?us-ascii?Q?QlKelfj8CkzYKFkgokzTlRIz8OuFXQvXhV0ykVU9LOPfsBU24Ox2aR7MtXRE?= =?us-ascii?Q?KTJAAQ8+p8V80Na5mHeTNLw70X/740sPK0Su/1rkbErebtZIb5+keXk+bj9O?= =?us-ascii?Q?lwSWcYHzuN0ejRr8mgrBuFy1ys3Ft2XU2GTj2BFWl9JBXGzVopcf90IzcZ5y?= =?us-ascii?Q?5wIlvzbSmBYy/F0j2MAmgQTt6rphe04DdwQLs7Qu2czjsy6FGEqo1+Fyl6UK?= =?us-ascii?Q?Cyq9FnShkEtQQY1owJhD+aSU1vvcHemKuW/h2LwUuexXnRGhQU+NrWz0Us2B?= =?us-ascii?Q?9FbtKVExScIZEZgyqqzrp60pGNgjxLYcIQZfIJ49lbpsw7OaLHXfajcrMzZF?= =?us-ascii?Q?UT1OYz6E2Nq4sLL1/8kTyEpx/Melv5ncFpDaVRwF9E1XLlhEHHC52wAKtwTs?= =?us-ascii?Q?yWllKGfzS197+JTr3mtTRxx07kzyED7cdpLkVsfCOQLDbYm0F83fEgIS6Mp/?= =?us-ascii?Q?691oEb9IkA2vl43qYrNadSXPoWYAF0OY94S3wmb/U7D5O2TykGKK1E0XYzEy?= =?us-ascii?Q?PGmKebN0R6G2rH7SL5WPuwH1yQqN4rWPc1Wm7PeecLLYNIxp/GpCjnwy+gRI?= =?us-ascii?Q?dutdMIKISQhvjxc3ti9/Q+I6ZqCSNGnJy?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 6:fnIk7vuvazCCmH7CM/XM8A9h+1NyhSaqj9NtyseL4HJtKtB49e6vTZqMvamiALDV1ibnZbq9Mnp+le3aBAM76/yLTaBa77ee5oETr91K3029B0kMvtcMaD7LOZueIpJw4Lh1pBZx5qeMGHypN2M6yCiCyfqtl8Z2YHhgDUlOFtnla38a/bsvmYMlKjvuD4RiGueIq+cAs23KugJfeC3WI8Cgzc6UszNCVRqIdK3zH/sjL/55F5GUsrxeqO1fYNrtnt3pjUD0/b2qr29XAx2PB+Wn2m/WOGr04706uH6dOMUVrZsts8Sww+fg+ZxpiTMbVmjEOqQX3HuZks6hhS9fB24IaeygBPW+l9kU11l4vwY=; 5:EQm6+wqns8RQKSbArdaK5AKDKER/2nbkI4sCVct4iakJ5Z07MnPp1GBG9fLCTIXtFYE1jetSqBRUqmpaIUjm7UMaZd4DhzELPZuRWpX6ZBklz/JZOYlPYZ8+cp84RFzlmmbgDoACL5QyZvWsficfdmadEHxEhAmSjwVkJ8k7kL4=; 24:u72RePdFt5Ix7bQQjzqMftIXajSfACHaKdE3vVU0ORZWVIMQL8M6b8tLt3RKwtzcSwkTtSIxm2vk9zVPLk2B0qAL5AQMfs0cqOvcwxMQgks=; 7:B/G0OxoM7GsMq1XIGXiOd8Yd5OsOoKXfjkFigyZzcW1aeeM1AtiDNWTZ2BICmOZqO6ku5sIn3EInNCDk9Of0r3UH30PS0KSFA5rMeuAHiGti9xRhqhuJnEP73KNsQ4iOod64UN50kGlMGRC0S2Qw35FPcWCxMY4aqjkWBA1fRSJ0/S/PijXUa6U7NeSzZY5UmVbAliAjDuzoL4qY7v2e55JWoXSYFAYkXcYYywhnkZ6dPct8ogVThqG3EyBN31pb SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jan 2018 17:39:04.6641 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e4e28a2e-934f-4287-a448-08d55787e16e X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0501MB2038 Subject: [dpdk-dev] [PATCH v2] net/mlx5: fix overwriting bit-fields in SW Rx queue 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, 09 Jan 2018 17:39:09 -0000 Bit-fields in mlx5_rxq_data can be changed on the fly by a control plane - e.g. rxq->mark. However, vectorized Rx uses a bit-field to mark pending errors. Even if one bit is written, consequence is to write the whole integer and this can cause a synchronization issue - two entities write to a same block without locking. As the pending_err bit is entirely internal use for the datapath, this can be replaced with a local variable. Fixes: 6cb559d67b83 ("net/mlx5: add vectorized Rx/Tx burst for x86") Fixes: 570acdb1da8a ("net/mlx5: add vectorized Rx/Tx burst for ARM") Cc: stable@dpdk.org Signed-off-by: Yongseok Koh --- v2: * fix typos in the commit message. drivers/net/mlx5/mlx5_rxtx.h | 3 +-- drivers/net/mlx5/mlx5_rxtx_vec.c | 6 +++--- drivers/net/mlx5/mlx5_rxtx_vec_neon.h | 9 ++++++--- drivers/net/mlx5/mlx5_rxtx_vec_sse.h | 8 ++++++-- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h index 90f129168..eb7a3db85 100644 --- a/drivers/net/mlx5/mlx5_rxtx.h +++ b/drivers/net/mlx5/mlx5_rxtx.h @@ -114,8 +114,7 @@ struct mlx5_rxq_data { unsigned int elts_n:4; /* Log 2 of Mbufs. */ unsigned int rss_hash:1; /* RSS hash result is enabled. */ unsigned int mark:1; /* Marked flow available on the queue. */ - unsigned int pending_err:1; /* CQE error needs to be handled. */ - unsigned int :14; /* Remaining bits. */ + unsigned int :15; /* Remaining bits. */ volatile uint32_t *rq_db; volatile uint32_t *cq_db; uint16_t port_id; diff --git a/drivers/net/mlx5/mlx5_rxtx_vec.c b/drivers/net/mlx5/mlx5_rxtx_vec.c index 8d23dae7e..01edcaf67 100644 --- a/drivers/net/mlx5/mlx5_rxtx_vec.c +++ b/drivers/net/mlx5/mlx5_rxtx_vec.c @@ -219,7 +219,6 @@ rxq_handle_pending_error(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, rxq->stats.ipackets -= (pkts_n - n); rxq->stats.ibytes -= err_bytes; #endif - rxq->pending_err = 0; return n; } @@ -241,9 +240,10 @@ mlx5_rx_burst_vec(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) { struct mlx5_rxq_data *rxq = dpdk_rxq; uint16_t nb_rx; + uint64_t err = 0; - nb_rx = rxq_burst_v(rxq, pkts, pkts_n); - if (unlikely(rxq->pending_err)) + nb_rx = rxq_burst_v(rxq, pkts, pkts_n, &err); + if (unlikely(err)) nb_rx = rxq_handle_pending_error(rxq, pkts, nb_rx); return nb_rx; } diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h index c5d5b0519..62155dbfd 100644 --- a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h +++ b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h @@ -658,12 +658,16 @@ rxq_cq_to_ptype_oflags_v(struct mlx5_rxq_data *rxq, * Array to store received packets. * @param pkts_n * Maximum number of packets in array. + * @param[out] err + * Pointer to a flag. Set non-zero value if pkts array has at least one error + * packet to handle. * * @return * Number of packets received including errors (<= pkts_n). */ static inline uint16_t -rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n) +rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n, + uint64_t *err) { const uint16_t q_n = 1 << rxq->cqe_n; const uint16_t q_mask = q_n - 1; @@ -963,8 +967,7 @@ rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n) opcode = vceq_u16(resp_err_check, opcode); opcode = vbic_u16(opcode, invalid_mask); /* D.4 mark if any error is set */ - rxq->pending_err |= - !!vget_lane_u64(vreinterpret_u64_u16(opcode), 0); + *err |= vget_lane_u64(vreinterpret_u64_u16(opcode), 0); /* C.4 fill in mbuf - rearm_data and packet_type. */ rxq_cq_to_ptype_oflags_v(rxq, ptype_info, flow_tag, opcode, &elts[pos]); diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h index 0dd8145bc..24fc90aa7 100644 --- a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h +++ b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h @@ -662,12 +662,16 @@ rxq_cq_to_ptype_oflags_v(struct mlx5_rxq_data *rxq, __m128i cqes[4], * Array to store received packets. * @param pkts_n * Maximum number of packets in array. + * @param[out] err + * Pointer to a flag. Set non-zero value if pkts array has at least one error + * packet to handle. * * @return * Number of packets received including errors (<= pkts_n). */ static inline uint16_t -rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n) +rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n, + uint64_t *err) { const uint16_t q_n = 1 << rxq->cqe_n; const uint16_t q_mask = q_n - 1; @@ -929,7 +933,7 @@ rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n) opcode = _mm_packs_epi32(opcode, zero); opcode = _mm_andnot_si128(invalid_mask, opcode); /* D.4 mark if any error is set */ - rxq->pending_err |= !!_mm_cvtsi128_si64(opcode); + *err |= _mm_cvtsi128_si64(opcode); /* D.5 fill in mbuf - rearm_data and packet_type. */ rxq_cq_to_ptype_oflags_v(rxq, cqes, opcode, &pkts[pos]); if (rxq->hw_timestamp) { -- 2.11.0