From patchwork Tue Nov 28 12:19:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matan Azrad X-Patchwork-Id: 31721 X-Patchwork-Delegate: shahafs@mellanox.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 572327CE2; Tue, 28 Nov 2017 13:20:21 +0100 (CET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0066.outbound.protection.outlook.com [104.47.1.66]) by dpdk.org (Postfix) with ESMTP id 423FE3259 for ; Tue, 28 Nov 2017 13:20:10 +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=sxUwTcnfYQ3PXw8RuU3wXjIRtjW9wPvBESTW3YaH058=; b=pMZsdZMqn1wAl61ThFmnFrQntmeVLYoyxcBwWszFZCn9lk8fWNLmm90Tmkv8Wr6qEa3/oXMX/MDc3kj1951oQxuh2sZofJw72pk44Pt9kljBpLtej26hpvyXbcNQIdgrFssAEmSqQgYnNGUzTG8KXyqWs5JZvQ+4twNxO9tLKuc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=matan@mellanox.com; Received: from mellanox.com (37.142.13.130) by AM6PR0502MB3653.eurprd05.prod.outlook.com (2603:10a6:209:9::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.260.4; Tue, 28 Nov 2017 12:20:08 +0000 From: Matan Azrad To: Adrien Mazarguil Cc: dev@dpdk.org Date: Tue, 28 Nov 2017 12:19:29 +0000 Message-Id: <1511871570-16826-8-git-send-email-matan@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1511871570-16826-1-git-send-email-matan@mellanox.com> References: <1511871570-16826-1-git-send-email-matan@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: DB6P193CA0012.EURP193.PROD.OUTLOOK.COM (2603:10a6:6:29::22) To AM6PR0502MB3653.eurprd05.prod.outlook.com (2603:10a6:209:9::14) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 3249c649-287f-4440-47ca-08d5365a5df0 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(2017052603199); SRVR:AM6PR0502MB3653; X-Microsoft-Exchange-Diagnostics: 1; AM6PR0502MB3653; 3:Aafu9rPuoE3XkQ5oep2OQkUxeyFe+1mJpP5i82jqWs+lYDJBRSI8A3hSaUDpd3E64YI2u7g5Bz6oVpm7HqlUhDL3N1rmpxxvOgCp9h5xiJwyPhgYX/EdiZ9e4+kq9FGUh9MHlOdHnVW0fhFLyNXDMfCt9F5Wj0a1oMqBbpd9RdkcIwJQK3c8O4zu9dYj8WoUS7Y0LG0WMjDE8nvQRLGIWlJMYbT7ZDBVAT+U0fLsBUSb3u8hghtYs+PddDeYftcx; 25:UPaKvKSt3SCJe/5IFMI2gHZQJT3wtutzIzWIFPvPupO7bsk0fSaOs7JkN6srAQMdLLQq9qY9IHe+WbQpy2GlRtM0WC6IiI2B8t9BeVyPdx9G9ysEHxxgBS9joN4ZTL3vp1Zb1N8qe9iP+h4/kI5W4kaXY/59lKM9BzkCE1vl+PZPM8ViAAPlPv22K3Wmg5M7yk/mtotF6DXZzHS0OV+0sepynV/2V88yDHgFGtMyIan2fs/xqPjxdtQVeP2LuOIkcUuIA4Ko86wNkjU+/MCFoCUXR4hFiblDwpfAIb5XaFWMNlkvoOrUAsWsMUaRTqWqsuCfw0qf6ONH4SP0yXZ5Bw==; 31:GQiXOVA1A+fc28LaAT6ZQwi9lir7MrvP6AlrBGGVuRsyzaUHXSpJWkqAP/OuSkqE6WMbzno59EkYdUJe1JWEXYu4sCi0Y9UO2mLdwaQvzsi3X3oUe2RrMa43l1V3O3d4ZqXMSG2mN2MspeO1gs3PmoRTOu3kQS8ZGpZ3TSwrBS6tok0WmXRkxn1yLDM36tNRCuNaCm6aFo2V63M31zqBT8u+fV2iheZ3AWOcjMi1w+w= X-MS-TrafficTypeDiagnostic: AM6PR0502MB3653: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM6PR0502MB3653; 20:3pnKGZORNEElRr6Ps9CzF6sQxbrkvt/GrLelEwfGF0W84kOhVgbSmHE1Jl5lbYf2FO4nOhCZoC8nEmP0cZv/qN46or5Fw5dziMfO2+CvjIclE2kXox11CcGdsS8wcQ2eA89yEu5mq4qv20d/EewfeFMFr62FzVrSsZmgA4iys7VX+p5rDj5LzSMlO5/YdbEO2b9Emm1QMhx1ES/QEECmkjJeueD9l7mPBK7xTRFZc0u31Qk6ooFVHFBXehLsxyifH0Bni7vx3huBIyxdUKNBm1vqLsHEffIxTBL1sNq/Nlnfx34bRyH7fGJWFUv+5ol5U7A+5XEAJ2pt7b8BIn/lQOOpHw6iLQz//qB/GoJCInhU0buaqk17nbseLl/Tl/2s80tMxG/2znOBv3l7tmYpfxvWqhsV4JRLdX0RHVKwinBszxUQlL/H4rm0MtBatJ230PI17iX2i5Cq8u+p/OB/L9lPP8Sav+CLblcjNY+BrmYaKFg4hDjxxGda/KhRe8BB; 4:lepqFK8jiST5ZpLH1/G+sW9mMIX6PcCJwhykvMdvkKZQNopm1TP+8wkVPetw5ED/hRnic2/ohjhxPUuGGONyZEODrTfMOWUb7p1fRyz21Lm1Gt8dbizUu7Uxl4XrLH80W59ANb9yZvL4BsBpGYbMqugDCdrBC19awr3ipqALnOW1Kf14q0aTlC4nCz1tzqvziRkdv7CpI8AbUuWiNO1tlNtysmmlJHhYcPfuDPgBak7gZdcCBRcQYU208at3+kFP/xIYyh87uaeOsieyL4HJ3w== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(8121501046)(5005006)(3231022)(3002001)(10201501046)(93006095)(93001095)(6055026)(6041248)(20161123562025)(20161123558100)(20161123555025)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:AM6PR0502MB3653; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM6PR0502MB3653; X-Forefront-PRVS: 0505147DDB X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(376002)(346002)(366004)(39860400002)(199003)(189002)(101416001)(76176999)(86362001)(50986999)(4720700003)(8676002)(81166006)(81156014)(6666003)(36756003)(55016002)(33646002)(106356001)(105586002)(2950100002)(6916009)(4326008)(478600001)(189998001)(48376002)(25786009)(68736007)(2906002)(50466002)(52116002)(21086003)(53936002)(8936002)(47776003)(33026002)(66066001)(5660300001)(50226002)(6116002)(3846002)(316002)(7736002)(305945005)(97736004)(51416003)(69596002)(7696005)(16586007)(16526018); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR0502MB3653; 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; AM6PR0502MB3653; 23:QEEYesm+Vu+Q43wDGaTTMpQx2qQpniwRsQ1xmmI?= ZwVuuBkGMvGfAiTNMgScAq02nWs30/IyL4sV3vi701GH/i0MK6RS8b6qGslN7MWbUZmuuYH9UQUPXPb2zx7cXLN+hVfqyqNSbd4l/EjPVy48oD5aI3S7HjbG1yi7Vw76KbvMGtzgb1iWzyhVIDPnc1awk4ghegNCcrSz8Q4aLYBbNFuDW56o3wSeCA6hhEfGP/YKkjEPUv6YX18RqKL1z9H5OpEyqtf3pBE0kUVH2HE7xivdVVs+1296CmNt9FKEus4ZvclIfZG/qefwbBDvFpT5epz6P/p2OWfhsh40kVhBXYPfU7ftB0i9rKf/0qcC0bqo5DWmmiKbIS94Y6URWCKBM5wWef3J/V/fdVeAcF9EYIOGJWGlzRIjuY1aJ0cA3Yeue0Z/oi8TEyfkwDiy1iPl9S/BfMN6P2LyJRf96+e29+ubPPXdJZ/j3KQRrNHre5j8DrkeP83hQpC9236ev1qQ25ypsFzUHKPsq7VaWu6u5IShZYpvseXryRdaU3ny6tXvzpTrYBsG9jL76JDENGFP91QTyTNmSf58Jgq+KlwdQeQLUuav7sRGdPexvuIjAAhGEmPenk4XCXrM40x4o+O/dtV6akEKufQXF7QDMakcVUxaRVcfzUM8AnT07PlhtpngbVd5/hGz25XgqZB0k7MufYCTTgg9vrLsLEYaCCkDAfhXqHpnseePyeMUqEZSBAa65IJMQTZd3yTfcWL3xG4L8tDkP5DkNPmPtA7SlqWWhVLKAf13VfRwdF88qG7Ya3f/Isz4oK1QoXaLtB2SHK8rT4PTtwXXqh/G4F5ENgVesXhITc7/3GJTZuSJQ2H973vFbIggIu/0DePgdb6VXzCL9fvV1s4nHv50NHhFAGlvw7RvS2LCgVY4U3VosUFE+tM1H6GQ3FKAe6HKlVebwyJGAGxqtMJW2gS4Ex+RnzkSQHb7LdM20Dp7VhnkFD6/n1GEQu81HIM23FWMYRrSfbk5umrMS+hZQeitG3WinEp+KJbr/XDUQ67KPZU24oTTaeRPhRxgJrNpVEBeTMMW80KUrB7T8ncM0IUuNYd7szm+qCDsk0d92QPTf53MDanxL+45c8NEtk8eOEnMEam7ibEHDa2b9V4jcKvbabQy5tC7wwLDufI1P37W3/SitTbGQRh4= X-Microsoft-Exchange-Diagnostics: 1; AM6PR0502MB3653; 6:NdvGPVVlu8lxbxrJkm/RUtiN0aSBZ7bc7602eBL2dqcVTR58EpG1mM7YaGAE8qCSXMy+GPSyZjNn4/bAijy53EWHUkjHlX888oU2oSUrn/eiZyJoSpbDe4zj8E56eRtC4qbqyVcvERbgMpLZMJIEOFSX4MYqhfdaamGEp/GpavP5RYonOwmD6nKxaHTvsoMpxnTGB8CEyiJLOB6fD0oCFqXhnSN86d/J8RHdYQmLwv9GGL4CnwoYhrEjvpKN7UKz5fxANcm9J2hvJZ1cN0/zgu//2juD3luq08zBNMz1eWIZcJ4Zf+g4jIgJMgPL1bwCyZ/2dmsulM2a8jq08Zcays9SEd8PB5Vl+IikGgQy6Y0=; 5:FqqNJ9Ad7QBmyWmzfVVp7W9KnpgQpilCoJ4zIp4g3Rol7wxyzi4bWE6z4Z/gKKwopUlK6Yn1jh5MH7T6EMXZx7KnO/U8nD+V0GlCMGz96o3oNplUYYCCzS9nXjQfY0x5QKciH7z9ZBJum8jK7/3cfVnlRZn9a9UIJorYSNKeTpw=; 24:0OLln9SUBc3eVRzWheF7DNk8FE9HSdNYvFz/W6+UcRKsxmjRZYwZTpA4LRWMuIGidXIyowNcJcAybL0PvDEHjbGm5JM3NaBNQQgiQ27g3aQ=; 7:Fwl6sRGqbBhoTAbUdmy/ZVsmuSCp5W7UDgI89+Lb2EMM/vnO257MgfBfE+5H7TfvgLJgmY7gONoc/lzc7fqbG4mF7o+911d1xuHpgpA5xoUuvTfBEvC+mky7/GhYhdxN8aVMs0imbjKm0H+4QUKLde2Ht/yIWqrN1MQa3ekpvLHkG+hbtEVevHN2IrzbrevvSavMgEVdOzn11d9hF9SP+OZVrk6/gxDK0Ttgd9N4oXmnRlI3yX8XaiqCWz4Xr3oh SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Nov 2017 12:20:08.8153 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3249c649-287f-4440-47ca-08d5365a5df0 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR0502MB3653 Subject: [dpdk-dev] [PATCH 7/8] net/mlx4: align Tx descriptors number 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Using power of 2 descriptors number makes the ring management easier and allows to use mask operation instead of wraparound conditions. Adjust Tx descriptor number to be power of 2 and change calculation to use mask accordingly. Signed-off-by: Matan Azrad --- drivers/net/mlx4/mlx4_rxtx.c | 22 ++++++++-------------- drivers/net/mlx4/mlx4_txq.c | 20 ++++++++++++-------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/drivers/net/mlx4/mlx4_rxtx.c b/drivers/net/mlx4/mlx4_rxtx.c index 30f2930..b5aaf4c 100644 --- a/drivers/net/mlx4/mlx4_rxtx.c +++ b/drivers/net/mlx4/mlx4_rxtx.c @@ -314,7 +314,7 @@ struct pv { * Pointer to Tx queue structure. */ static void -mlx4_txq_complete(struct txq *txq, const unsigned int elts_n, +mlx4_txq_complete(struct txq *txq, const unsigned int elts_m, struct mlx4_sq *sq) { unsigned int elts_tail = txq->elts_tail; @@ -355,13 +355,11 @@ struct pv { if (unlikely(!completed)) return; /* First stamping address is the end of the last one. */ - first_txbb = (&(*txq->elts)[elts_tail])->eocb; + first_txbb = (&(*txq->elts)[elts_tail & elts_m])->eocb; elts_tail += completed; - if (elts_tail >= elts_n) - elts_tail -= elts_n; /* The new tail element holds the end address. */ sq->remain_size += mlx4_txq_stamp_freed_wqe(sq, first_txbb, - (&(*txq->elts)[elts_tail])->eocb); + (&(*txq->elts)[elts_tail & elts_m])->eocb); /* Update CQ consumer index. */ cq->cons_index = cons_index; *cq->set_ci_db = rte_cpu_to_be_32(cons_index & MLX4_CQ_DB_CI_MASK); @@ -534,6 +532,7 @@ struct pv { struct txq *txq = (struct txq *)dpdk_txq; unsigned int elts_head = txq->elts_head; const unsigned int elts_n = txq->elts_n; + const unsigned int elts_m = elts_n - 1; unsigned int bytes_sent = 0; unsigned int i; unsigned int max; @@ -543,24 +542,20 @@ struct pv { assert(txq->elts_comp_cd != 0); if (likely(txq->elts_comp != 0)) - mlx4_txq_complete(txq, elts_n, sq); + mlx4_txq_complete(txq, elts_m, sq); max = (elts_n - (elts_head - txq->elts_tail)); - if (max > elts_n) - max -= elts_n; assert(max >= 1); assert(max <= elts_n); /* Always leave one free entry in the ring. */ --max; if (max > pkts_n) max = pkts_n; - elt = &(*txq->elts)[elts_head]; + elt = &(*txq->elts)[elts_head & elts_m]; /* First Tx burst element saves the next WQE control segment. */ ctrl = elt->wqe; for (i = 0; (i != max); ++i) { struct rte_mbuf *buf = pkts[i]; - unsigned int elts_head_next = - (((elts_head + 1) == elts_n) ? 0 : elts_head + 1); - struct txq_elt *elt_next = &(*txq->elts)[elts_head_next]; + struct txq_elt *elt_next = &(*txq->elts)[++elts_head & elts_m]; uint32_t owner_opcode = sq->owner_opcode; volatile struct mlx4_wqe_data_seg *dseg = (volatile struct mlx4_wqe_data_seg *)(ctrl + 1); @@ -678,7 +673,6 @@ struct pv { ctrl->owner_opcode = rte_cpu_to_be_32(owner_opcode); elt->buf = buf; bytes_sent += buf->pkt_len; - elts_head = elts_head_next; ctrl = ctrl_next; elt = elt_next; } @@ -694,7 +688,7 @@ struct pv { rte_wmb(); /* Ring QP doorbell. */ rte_write32(txq->msq.doorbell_qpn, txq->msq.db); - txq->elts_head = elts_head; + txq->elts_head += i; txq->elts_comp += i; return i; } diff --git a/drivers/net/mlx4/mlx4_txq.c b/drivers/net/mlx4/mlx4_txq.c index 4c7b62a..253075a 100644 --- a/drivers/net/mlx4/mlx4_txq.c +++ b/drivers/net/mlx4/mlx4_txq.c @@ -76,17 +76,16 @@ unsigned int elts_head = txq->elts_head; unsigned int elts_tail = txq->elts_tail; struct txq_elt (*elts)[txq->elts_n] = txq->elts; + unsigned int elts_m = txq->elts_n - 1; DEBUG("%p: freeing WRs", (void *)txq); while (elts_tail != elts_head) { - struct txq_elt *elt = &(*elts)[elts_tail]; + struct txq_elt *elt = &(*elts)[elts_tail++ & elts_m]; assert(elt->buf != NULL); rte_pktmbuf_free(elt->buf); elt->buf = NULL; elt->wqe = NULL; - if (++elts_tail == RTE_DIM(*elts)) - elts_tail = 0; } txq->elts_tail = txq->elts_head; } @@ -208,7 +207,9 @@ struct txq_mp2mr_mbuf_check_data { struct mlx4dv_obj mlxdv; struct mlx4dv_qp dv_qp; struct mlx4dv_cq dv_cq; - struct txq_elt (*elts)[desc]; + uint32_t elts_size = desc > 0x1000 ? 0x1000 : + rte_align32pow2((uint32_t)desc); + struct txq_elt (*elts)[elts_size]; struct ibv_qp_init_attr qp_init_attr; struct txq *txq; uint8_t *bounce_buf; @@ -247,11 +248,14 @@ struct txq_mp2mr_mbuf_check_data { (void *)dev, idx); return -rte_errno; } - if (!desc) { - rte_errno = EINVAL; - ERROR("%p: invalid number of Tx descriptors", (void *)dev); - return -rte_errno; + if ((uint32_t)desc != elts_size) { + desc = (uint16_t)elts_size; + WARN("%p: changed number of descriptors in TX queue %u" + " to be power of two (%d)", + (void *)dev, idx, desc); } + DEBUG("%p: configuring queue %u for %u descriptors", + (void *)dev, idx, desc); /* Allocate and initialize Tx queue. */ mlx4_zmallocv_socket("TXQ", vec, RTE_DIM(vec), socket); if (!txq) {