From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10061.outbound.protection.outlook.com [40.107.1.61]) by dpdk.org (Postfix) with ESMTP id 5550F1B1BF; Mon, 8 Jan 2018 23:07:05 +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=/Smtv1ptCQ2BNnwYyTpqDrhtIrOTkPhDxiNFM50VHwI=; b=WX6ITHRpH4qeaSZP6jzJ4Nq/kigtoZl2j8+FmiiWNEl/iqNvJTO7lVdrTPBHDAXVX9nSO2+ThKWn0umXigCno0EBsb7/aXcke1p9xxXDQM5dH07BbLMPcB73Cf7t1FQ/s0LACuZoNWw4wTcxZ7ChPJa6dhMaRUHCx+nNZAFO2os= Received: from mellanox.com (209.116.155.178) by AM5PR0501MB2036.eurprd05.prod.outlook.com (2603:10a6:203:1a::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Mon, 8 Jan 2018 22:07:01 +0000 From: Yongseok Koh To: adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com Cc: dev@dpdk.org, Yongseok Koh , stable@dpdk.org Date: Mon, 8 Jan 2018 14:06:45 -0800 Message-Id: <20180108220645.13493-1-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: YQXPR0101CA0022.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c00:15::35) To AM5PR0501MB2036.eurprd05.prod.outlook.com (2603:10a6:203:1a::22) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 12282dcb-f333-4cce-d44a-08d556e42596 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:AM5PR0501MB2036; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2036; 3:sHym1mSqPhYZ/UziUqJhSwpdlO15SFzSxjUUb2ZfybAhEvpfENelDBp1mT2OdkNjfPIdoJR3t9czron0ZctDulfNhixa4hvLhducyg0VpmQvspzocImWkdHBeK023OonLT/BhHeuLIBOlPydHmgGdklw4RszQv10TcS9iyKFPuyXCYdcTr9+shvjx1CJ9v9Pf9nDkQoHiTOuN460vzhKA7WcZ6xQes2KuOeMxD4ak+Ykm/8A3Lg3zjHejNcNXrzN; 25:ehZcoq8oN7cgImAWDfBUtJTsD7MOwCaySzt4Kh1muCNDvd0HMxJduuM7EvDypaDYcpBcyZAcJ1SIvLRvrVULf9Un/CEZATb/Ygs1VU//S9EAKN/xvj/QpHlUbPiFFfwceHJ4/K4vrSKC6jRhM66xIZzLnGi67xSspTk7ut/9V5k5WGR4hg8/wj0go4MRhvZAc1OqE85ffl/T9DXM/Bpg+GJo9NrooYNFfRqs03YNtWym2jEsFMlMwLRFZ22FTNkCOMEVfTkAEsOqcHtd2rwr2YGHUmz2Ae695HJZDho4LrO7ZTWuAmChFHYKAQqDRCzijwu4yiQSBTeKS8EcLU6vTA==; 31:NtSzSrUruQrwgrV1tB7d7ilQGpwLJLn0nCjP6btEYNZvh2OWMyzfXB3UrCgurxOA+zPS04AFAttHjfMUUysvmN6qmdQjJOXn54++5neSZ79ZXWB0l8YTbsyx/ttcgmKg2Ph5Z3ycxoTlQlHbZ1bMJU8Kt+mg2p9dhafuYwfnmtAXkoQYb6NFI0Ne4ZdMw2HgiAVdQiTK4q5xmGsR3Z80PA+Uaqrw3IYv08qjj52d5LE= X-MS-TrafficTypeDiagnostic: AM5PR0501MB2036: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2036; 20:g3X3S+V/qSBLhzehYSh1k2PzCZ5+Qb0xgAveOm6QMt6dbe94eUc2ICKxEcr8k9jEpTULxxF2Y/h88zIbWl1Rfx7S1lKORIJY/6Tb70yMalcxhMxLMT0I8nPufO504rT5wr6U/EsecWk1LK1mFKmNB2lCZbSZI/AFY8bZ4+nDg1eD/PrPCfPnxa5EHNNIcmRkPFeQww7uHFrf2Z6oCf5GuwhSAK+Sc18MTTC9NgDnKdcyjQOTODaixx+3TSzunywNsEO7XoU5DZ48CQsNLBac0yRC283boyOF4MkENb7ud+1tU0AZK7g/2R+ujzAbn1EWkBCqUoi9eIWOGsdeeZNR/rTzvbOg2kL3I7IwW+QplJ4DRJuUb1NR4Cy/Xs1IdevTts6QAEfZMWrqXyVHqnXQazRBnSd26gNdx/eWETTfKy6eaf707myx2/SLld0hOc87Qdu4K4JIeRW0HM4C6WC17upEYh5o1U9mmwqA1bweTwiuEi67PcX2J7TmJonl9tBR; 4:yvHiAt6DmITZF/rfOUkQqAAjO86/pn5O2hgsJ0xdKy01KPttDUbb0YDS9a1bkg36YCnFGiUUIQCy0J6ycC6jSRdXouqrE0F8ogs+os4Sr+++M+uUSzkVoostK+LMa450ECQjrRBS9UZimv7Phyzb3EaF7sp1tqlzC845Cl/5Sh6yr1fVsFkg5lKUz7p1MFA2wHLFMHcuTuVhvboP3Jl0GebZELOQr6L+Ygosv/DzDiVcnva401GMScyurlzxoYHCoU7k4LhWnFfV1zgmocT7WA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231023)(944501075)(10201501046)(6055026)(6041268)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123564045)(6072148)(201708071742011); SRVR:AM5PR0501MB2036; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM5PR0501MB2036; X-Forefront-PRVS: 054642504A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(396003)(39380400002)(346002)(39860400002)(376002)(199004)(189003)(81156014)(7736002)(305945005)(316002)(53936002)(1076002)(55016002)(16586007)(16526018)(81166006)(6346003)(8676002)(7696005)(68736007)(52116002)(50466002)(48376002)(51416003)(478600001)(21086003)(106356001)(97736004)(105586002)(386003)(2906002)(66066001)(5660300001)(47776003)(6666003)(59450400001)(25786009)(8936002)(6116002)(36756003)(4326008)(69596002)(3846002)(50226002)(86362001)(309714004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0501MB2036; H:mellanox.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:3; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0501MB2036; 23:5em+srvgMG/7ds6Upzmnh0Fi7zmR60UfJ4BaokK?= =?us-ascii?Q?VQJ9Hh0c1V03s6NQX/d36Y8VYJFnab6HoKxEcDG4tHzLBQCNziqWFIXZmJzX?= =?us-ascii?Q?wi1FV8nSpZ8Cr1X/sQ5kObocjL51BX621XSaVgIClCEwWUYgmTRVrZ2V+Edz?= =?us-ascii?Q?+ZAZQ5GmP4ruQPtnfpFfjbmnvHZK8ARVrsXL5eRCSoB/768QJPMVcYWsSAxl?= =?us-ascii?Q?zHHvrHYxIuryzVdE/PGz6Xpeuyv/QwK2QZLFOkd7zJQ+J2J838NutBa1NhLC?= =?us-ascii?Q?Qijuk6DOlrcN2U2kg//rdRWzwMbrlQVgzX8kTStxNB71Il+qdXJ+guQCibLB?= =?us-ascii?Q?VTdFyA37umpJcwSrztOBBDejrBPFvhePvECcCQJpasXmn0sH/CFM7m3fI1yC?= =?us-ascii?Q?n+SB670y2HLhvoNNoqd+ukkpyy/vemDyjUBcEFm3LXPmpPD+KDGKY0ucKmu3?= =?us-ascii?Q?6aXEsg9DyjEQMmZNqvzU7UaB8E5QgG9U7eFONXUNANoo5gwyTg10nr1GffwW?= =?us-ascii?Q?VLIXGCSIRtRsyEKs0SrWo2dLQ/u9bW+KF6PDCL2w4M29s9wICAtzN/AY3beZ?= =?us-ascii?Q?RplAHznon0Knoj8n//xnTiqwFQEVUC2ySs8L1mGcUzoe+G7hS0pZd8J/p0YY?= =?us-ascii?Q?tp6L67UZMCVHbVCq8k38vtAVrko34az5M6YiRQIAt4sTWeWOvFO+O4APi53U?= =?us-ascii?Q?Y9xsg3P/j7w5GcTidaLyH2GU9qJs3YnvEaHR4482W6I2IgmZY6in8eqGjkYs?= =?us-ascii?Q?sM0XDV5fi1ZDeg1MWDFrFwd5f8Fyf1fGEywDdzjWGnLfYTHe5Am2/NDl2vSM?= =?us-ascii?Q?vH29xxc33MzqXePKgm2cL+XQDIQpvy7UC9PnjYcgBiA/d/R4iPpYwQbbWKFJ?= =?us-ascii?Q?AYagjVwE6HEmxE/tITaQzbVn/ZPzFln5Ni75y68X3LIihN/18pd7PDxoamI5?= =?us-ascii?Q?xS0lJF1loo/FGAXaj1dYsMgSF8z/c7fBidXdW8JdIIZ42Fq8znlCJLrcb6gT?= =?us-ascii?Q?HJFMT70Aw/Zoe1fg9DRmyjybJYVeV+xfl/RH33/oniX2jVcuoeLa2cBETRub?= =?us-ascii?Q?HdVF6LHyX9kMFK4GydtpHWhyqgJc8ybJBIBrd5EjNgwMDFsbRn7VrivoWQAh?= =?us-ascii?Q?knHlPlX5bmD8=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2036; 6:WC5NyYNNrjh8PauCklzZ1moytyOXwGGeB4iKrpkrUbzj//y/wFi7cXBQRsS61arDHZ8uJiUReWEep43AWBof9QPulK6ylGkQ8XkPyBHB8fny7Qv1Ufg7zKy45T4Uuw1n0ZzdTrkxrd857rUgEkL5sRAIGc/DaJG08ycHGAbYOjk18X9PrPFT3odwVu82XqE6oOY7/j1kXr63bbQY9ykTi+ajXFRTbELz5nH9ZtB09htAqiEnUsB0GQBNmaXs7Mq2TR7oGhaJtvffjPa4wBsom/yihDYUsWyFOqrqcOUp2tvVM+BB1ZQeDtyMI9sYeiQALdQg7PMbl+F6+9ElGBT6L+9avS5SjieF+lHY9o8CQ40=; 5:3fcKFmAUSAoTwFe5casjWqm0FjOTYk8z7O17f3Vm/44+JX4jK6lsYZ1MCKiTDBWSE1kGhiYoubz3+UuMS0E6VP9fJsOimL5KAsfoLkDuCWIiMiim9MsSwueulez19jMSj8IoUogjeYbfEQ111o04VVMAOFlc1xY1v7n79Vxo3RE=; 24:G0y7zzbkY/d/GWoEEWQLyoEVS5HxWmtTHcHoYCDPO7e55pgqdxMMvRnTshzP6g/Yykulba8I5rWyy/AtiDxKfsRXqwStqvcaXkU+7uT6q5U=; 7:spuJ/4uZeZEz4miwzSXGVQHf2ckZRV//5rewl+7FyVEh7beyZpdteik1SeR8znmzMULQu1oI4IGqlaal2jsmBB5lZpD6NeSP9m6H6ghOQzHtKc4RyppBPgL7LBU/TbC9d/j17CxWQHww422wtOotZG86+ryoHT6FHgu8SNp/PhLGybn/r4sczdKRsfFqDmP9VvNsRxZhOA1OP+Ix4naIBRsitOaZJaya3T00FK6Jx23eHrpUkJKWVJl+zUnAEZG8 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jan 2018 22:07:01.2841 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 12282dcb-f333-4cce-d44a-08d556e42596 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0501MB2036 Subject: [dpdk-dev] [PATCH] 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: Mon, 08 Jan 2018 22:07:05 -0000 Bit-fields in mlx5_rxq_data can be chagned 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, consuquence 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 --- 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