From patchwork Wed Dec 6 17:57:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matan Azrad X-Patchwork-Id: 31961 X-Patchwork-Delegate: ferruh.yigit@amd.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 6C8631B195; Wed, 6 Dec 2017 18:58:19 +0100 (CET) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0072.outbound.protection.outlook.com [104.47.0.72]) by dpdk.org (Postfix) with ESMTP id D16C3199B0 for ; Wed, 6 Dec 2017 18:58:14 +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=IYEgkBmCT0L6xxI8LfH9vignQJp1D6A3YgFNkC+7TT0=; b=FJ9wbqqGN086hEgGi1+svmA/aNeb0AOuV/Gpl7G6MT0ohlsFAgcQw8BQEarCxARz8lAyq8Y8CYXaOd7+stRpKVa6KXjMhKn5QVGqMTrQQURxxnUtMRNzd6Qi8E7Bwi+h/ZGd97P5N7SD1pAPVZRkdK9LyqhTeE8j2HaUO2mD2IU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=matan@mellanox.com; Received: from mellanox.com (37.142.13.130) by AM0PR0502MB3650.eurprd05.prod.outlook.com (2603:10a6:208:1d::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.282.5; Wed, 6 Dec 2017 17:58:13 +0000 From: Matan Azrad To: Adrien Mazarguil Cc: dev@dpdk.org Date: Wed, 6 Dec 2017 17:57:55 +0000 Message-Id: <1512583076-5592-8-git-send-email-matan@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1512583076-5592-1-git-send-email-matan@mellanox.com> References: <1512571693-15338-1-git-send-email-matan@mellanox.com> <1512583076-5592-1-git-send-email-matan@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: AM5PR0701CA0023.eurprd07.prod.outlook.com (2603:10a6:203:51::33) To AM0PR0502MB3650.eurprd05.prod.outlook.com (2603:10a6:208:1d::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: e9dbf1f5-86a9-409e-4b76-08d53cd2ebc3 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(2017052603286); SRVR:AM0PR0502MB3650; X-Microsoft-Exchange-Diagnostics: 1; AM0PR0502MB3650; 3:8G7GkTqw2Y3HnsdBY6b0mFzBjU9uNIvBTu+JjBPYwi/l718pDW3USwiZkARKKZbCZq76Nr4vAQ20g5C+GOZeqN4Pwpab+s448ReQcl85R/uO2ZCp7zv620nZQvq+4XqpZWDODHMGKrGlBrg3MV6DzePgA0xpYvOymRlAGYLRRojJMk0B7R7tB/QwktAXqDZovx2X6A5yTYEnR6GihbPg/peW7s/x+otiZ/y3XVBAl0Qvf97TpOJ0foKlxSWshhnF; 25:7a9yjbhdV6ObYDhyVAhLvCx15tQdPUGpKJhguxZbv0AaaZQnZhVga6ESm+mNFFcT0/upZTKa9MStb/8194wpD2Bq8ZXmgTtGSJIMukSjYdUD8Y9Hynb6aQv6zERAjUcDGx7fpzlaFkV6+PqdfRn1LLzwzyhG/hQh1OSW8KG+meOxqtil9cqvHYMY7zkVudmPf+/gGLEdfjGHNcRckqQgCe4nZO2jPoeWNNN/ZHu1DrzF5Z/DnSDfKzJfnT48NxxMj+vcl9/WlRw+3lWoV41guLQ3QUIFVaYXlVinkCrIA+ICqvOIO5qwve1152CQkDRtvI7PorEB/BYhXq0g86odpA==; 31:UC9fA9rbhUaVKWgrOHpznDDBVO3OSmKHUhMylbn3hGiObTn9tFL/dk1F1AGujF0aeWaXXoTm1yYR8Jb+1a/8oWUPRRx4K9Hx/DJW1cGsKFMWOcbGhIo2a+fwJIOddrGwYinrScSl7+zW724cf4PzriNOfUcqaWxfmeQmYHyov76XsUfd7DgolXPKgvKc/kZmhgN2Z6ViBesQmFusG3V9QWaUFJ5mEf4pMA0qtctIFUw= X-MS-TrafficTypeDiagnostic: AM0PR0502MB3650: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM0PR0502MB3650; 20:HW32+7bJEf3Sslg+ckoDsOaJwH/wcwv2nXT8gVMpD+pBRYd/c+pNTLxBh75FAHFYN5F1kUsCC4p4fxMAk4ygknupnavBPn9fvVgHlfCxgGyhs1vz3QIg21rzfG8xxrocioKhjNCLj30QnLyECC8PGhu3i9xDVu8pihdy2jm6/P7Hhe8mhAxItJZfEm5gCjGXKW9xGnRBVGPjdIaGSNiTaAqwv1ntQ7va6b+vYdsbALy9S17VXx4GSOe36ss+scScHOL3j15mpTptLHF07fycwQzVArK0bXVT2Nq5o8QIwVfYAZ1+lXxPZTLaxSswc31O2uQAA48PiaxfPEC/yucu7LkDzuDVMVI2HQFTvFnWvZsOLY0q+QV4K7OVKXzTjbAXdV1oyfT1SGceJfVL3LXgGv/sDGcTpcoX1KWS9/kKP66yxcJGcb+rCPdyZ5jfE5h0LefmYtKpGMjxKDBQM+5GzuksDQ1ookpatRkuAjP6O7T6IKQ+fZa9H1hHfRBPDdFA; 4:5CBTlRD+ZFwDc9IXg2X6eEA1sQK/6EEDSGZedaPTEsA8Kh4YxCvRvOYeZBm5iS7NgEQZopeO8Bgccv64jVySbjf6ueVe23ncTHut3oiXR594ATDjbTU/HcUGJsFKNgk5AU1eLYdoACujiwq8o5CIVeCKPOMH4Q+E6xPe/hBdYHrsgYZr1nkhPcC52sQDRb6dwXJHy+jeuU9NTcTJqUpCIOqMVFeJvWLnp/5Xr5V2jyZIXT03L+jNw26iQDAamX/vHUYCtOhAqgkcXlAG4fkSX8AW6gjIZkX4NxdN4IKT4GjbGZWYWSTusNZBMtVffGdk X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(131327999870524); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(3231022)(10201501046)(6055026)(6041248)(20161123562025)(20161123555025)(20161123560025)(201703131423075)(201703011903075)(201702281528075)(201703061421075)(20161123564025)(20161123558100)(6072148)(201708071742011); SRVR:AM0PR0502MB3650; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM0PR0502MB3650; X-Forefront-PRVS: 05134F8B4F X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(7966004)(366004)(39860400002)(376002)(346002)(199004)(189003)(25786009)(4720700003)(4326008)(2906002)(51416003)(5660300001)(106356001)(76176011)(8936002)(53936002)(7696005)(105586002)(16526018)(68736007)(33646002)(55016002)(3846002)(101416001)(6116002)(86362001)(305945005)(21086003)(48376002)(66066001)(6666003)(81156014)(47776003)(316002)(8676002)(508600001)(7736002)(97736004)(81166006)(69596002)(36756003)(50226002)(52116002)(6916009)(2950100002)(33026002)(16586007)(50466002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR0502MB3650; 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; AM0PR0502MB3650; 23:U41qjcOvgq/Sa43cz+pu5+elOpKh61JEZTmTgwo?= OtU+r84jTmHLtnKbPg+JOOiTU5VxeHlyS30th3o0bjPqa3zOCQHJc8QZLOw7sHRzS+wmgyd4gRFhPiIj2GBpeRDJTRBuEtPjARZR2f3r7iS37HMwle3FJb2M64m9fpp8raQmBoRlb5hkvsIHv1feWoXgKY2wEYlRrl95cPhGc+lmVSuS/91t5WKf0E0ZiFvt045hxNGhPZWcGUHFdTYodQCDG09J8RuHy/lt8QBoWPZ8kjZjiCnpJsjEyBSiCtTqfL+lHymVE68qz6q1gRrpqhL9ljcP2F3lrSTiB0Phnads+Kt+NOOk024g23qk+C9RdhKkSdboCnrfIxUWAe0Ss00ahxgKGZO8+hEN3F+CZ2QkvLmEjHbU6Qm2vGYkQ2FXXFWcF2VbwIvYiqFzln3T6/fzyUQtQKRfjqXZsIBw9lcDdIQQn6PiPtiycOawvN0sXV29uxB9zlQoCzn79vhbJgDDKYKjpNdTNuHcwhzT1eWVHSSMmoDlgYfEtCAq3ONV1Z6b+Tai6q89I8KhGdx3xfOIRGrs9eNfOD5rtzDW96+xFgsG4HDW+R4BwTlZwPP89M0cMoJVMxmPoIix3lfH/rPIMDVrr7W/6Zjvrz3qtBRNATVRrk8t+DmUNu+6f69VVadtDt473zyERjWDkrOvBea1ZyQ2QsJfx40cZUtsmcb8eJR7oziKXP3tV1j7FFMxY6Om6A3dhIZN1WYJd/K6LDegd+6MsvEDzOcdiBtuu4UZawX+j7F72KS44KLsrbPPVSyRbtzLEWUmVg6djEsvBCtr1M4jv/oxeUpeqptNudtlcqqw+mmCTLI9drSgvMawvr7GHrB3aBlA7i8Ky3G3zmayn0j9AaVGPgdnfTEV5xylKeiupz2LwTKBbwdE8xsn4kKTk3BJjSycq7mqppl0Vq1xzgaHqqoqon+Cr7m0WxIovDZaKPVPbnr2Cj7Du8ZLwJ6bu8c96515p73ry+M8zKSssDV6Cask/rn34yarqoRuAuftbNKUu3NiCttRoHSZaFir7v07eePZ3ekcodoRkherxCJCGqWuwUcZNh/c8IjI5E55TBy4f3fn138xnGHg82ZNhOBCGjC8C4dEZdwI02qYc X-Microsoft-Exchange-Diagnostics: 1; AM0PR0502MB3650; 6:yL830z2HbhtZu3OdSQB+nSp+gCc/5bIudtzYIceDJc3xa8k6+vgH63WrN7xNjDUD4x+zARtEVTC+aPhQTRFVoBjhLFTq/urW/hDvtvxCp5WxCWQVdmEKu+OcAiVb6bSgCjJFthb+5euS7yPO6SYfkT+MCjw6Q1V5BCaDhWwEuJEZYrH1DtQaItvm/9WB2el8EEa/+gt0fvJ2DuLqORT7bIfTdU3AIbjbsxJ2H48U5ih96hS41jBcYdbSKkyuZPwU30tfIygNoEsHKGHJ5Bxmoq/ypmbqgrFDs4EgrQYe3bLvYnsfXaqVF8PV0iUg4AVcc5EQDzryKNvFgwET3XpgHzXDzEh8dmVigge+z/6zpYU=; 5:q3KuE0zvhvWAFgm48/N6EyE0tf9zBsXZ7ftsvDzoxyyY6RFGtohwj5+kmJVf06xYf6bJ2L0XcoLpBq/m4ynG2bW3Bzy0iuYQxSNcXlbgB89hRop+o0KdaaUGQdfAOoEdjb9gLAEDNZhUE9M45sTSC0kmbrCl9Lg2/IjwtwuLCMc=; 24:QC6XLOFQEL2gGHo+bF8dtErddLa/zORwPP924WeaW8ZIA2zfRP7zftX/47v2s5IqQUvt1kzTVs7+8MO4FdErkEOjtPIvUPzSUBS6wgloKeg=; 7:Bqx/XxtwFAa7bi6O8mMls+JpaXiCKR5UENwwGOAT3PndBrljJsfjWUyJgsnnak8psXA+mTNiSqjIxmKRBpCJkUHREhqp5zxkCeD6lb4WgB4XKvAp8P+u/+w7iRjFvGhP23dhigaUlKdjgs2kqUt5HUMbOliCSWyWViTGSSTqjJLQfMm2o43NXmb5nbq8eyQ8MxRX/FdYIb/X3brhElheZmDLNEB5SakYohFh0QZoiLXgOokOatcr5vzg4wTJmqDu SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Dec 2017 17:58:13.4661 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e9dbf1f5-86a9-409e-4b76-08d53cd2ebc3 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0502MB3650 Subject: [dpdk-dev] [PATCH v3 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 | 28 +++++++++++++--------------- drivers/net/mlx4/mlx4_txq.c | 13 +++++++++---- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/drivers/net/mlx4/mlx4_rxtx.c b/drivers/net/mlx4/mlx4_rxtx.c index dbed74d..498e56d 100644 --- a/drivers/net/mlx4/mlx4_rxtx.c +++ b/drivers/net/mlx4/mlx4_rxtx.c @@ -312,10 +312,14 @@ struct pv { * * @param txq * Pointer to Tx queue structure. + * @param elts_m + * Tx elements number mask. + * @param sq + * Pointer to the SQ structure. */ static void -mlx4_txq_complete(struct txq *txq, const unsigned int elts_n, - struct mlx4_sq *sq) +mlx4_txq_complete(struct txq *txq, const unsigned int elts_m, + struct mlx4_sq *sq) { unsigned int elts_tail = txq->elts_tail; struct mlx4_cq *cq = &txq->mcq; @@ -355,13 +359,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); @@ -580,6 +582,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; @@ -589,24 +592,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); @@ -725,7 +724,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; } @@ -741,7 +739,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..7eb4b04 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,7 @@ 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]; + struct txq_elt (*elts)[rte_align32pow2(desc)]; struct ibv_qp_init_attr qp_init_attr; struct txq *txq; uint8_t *bounce_buf; @@ -252,6 +251,12 @@ struct txq_mp2mr_mbuf_check_data { ERROR("%p: invalid number of Tx descriptors", (void *)dev); return -rte_errno; } + if (desc != RTE_DIM(*elts)) { + desc = RTE_DIM(*elts); + WARN("%p: increased number of descriptors in Tx queue %u" + " to the next power of two (%u)", + (void *)dev, idx, desc); + } /* Allocate and initialize Tx queue. */ mlx4_zmallocv_socket("TXQ", vec, RTE_DIM(vec), socket); if (!txq) {