From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0078.outbound.protection.outlook.com [104.47.2.78]) by dpdk.org (Postfix) with ESMTP id B93B21B03D for ; Tue, 19 Dec 2017 18:14:55 +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=P8XjtrXeSDLVWEQbciESC5A12qQCiWvEnuEygEY3Jb4=; b=MfBZ6W++MXch3vfqUnJ8U2m6vLc/jfHn5zroSPwLH2NXwhlm3rgdVYfiuMhcQ9bUtCf0xAUm228QbzRKPJTQAl5euUvislyTCp82SHeMFNfQ6w4nM+8m5AoNhNwtXwVT6R0sTd3goQiW/fJ1nqZe49oY6rsMuBILEab4ATcT0TU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=matan@mellanox.com; Received: from mellanox.com (37.142.13.130) by HE1PR0502MB3659.eurprd05.prod.outlook.com (2603:10a6:7:85::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.323.15; Tue, 19 Dec 2017 17:14:54 +0000 From: Matan Azrad To: Gaetan Rivet Cc: dev@dpdk.org Date: Tue, 19 Dec 2017 17:14:29 +0000 Message-Id: <1513703669-29363-4-git-send-email-matan@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513703669-29363-1-git-send-email-matan@mellanox.com> References: <1513703669-29363-1-git-send-email-matan@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: VI1PR0102CA0086.eurprd01.prod.exchangelabs.com (2603:10a6:803:15::27) To HE1PR0502MB3659.eurprd05.prod.outlook.com (2603:10a6:7:85::17) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dbe14df3-ae51-4f87-bf78-08d5470405da X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(5600026)(4604075)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603307); SRVR:HE1PR0502MB3659; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0502MB3659; 3:XzaNmOmiYNMH/E2W6UGVfdnaTtXiHieuYsrJcQ8mV+yxbe3Mgjbq4sKdoE4AmfXjydZIC2gbd2zEFQ9U2pwAdF16HhiDq9DshA9Uuwy00NYBghkuH1Hp1Jwa188/WsaGs2zpZeD8miXjgh2UXOxA3/Xycg+qCMigKVGHzJB3HzkOA9BIOwA3gqsGHQxAwb1jP/JPhCz7IXwMI1r6gBKVfUhg3sBDbJ519OsLI80L7nhs7IddDr4yiILHt6xRn6J3; 25:5zuy7mErJqOix7QSQPOA1jzXs3pU2Y343kVAZh0B+EesvINyPPhpPqNm5Ylp8d5KsadjlUr0+fC+e0j57aDFUtuaCX6NYjgEuCAahsqbrbKOgjhmIDjwPeVWrWdyfurVtyknP2k1lRQVt5Sw4FTrhTa24urvTJmGmD8TbiZhUOEx9a65v5/yAMLVgAz/aKeK0SCMlUJE7mHt4UoBElqEIom2Yggc88AJ6bFvGHMGBm+/M+U4ian0LDyH0OtjTEWL2U1Ksv9txcsQpOxJlkl80XZ4KhOI5Z7YoFobJTuDO1JLd+JsYmA3f52XOfdjr+1ycUe8aKlAQkf1qWQXK4vsUA==; 31:JvTbOmUJaAzrbyjiViKT9Aa37Bw9F/9xJ2cZl54o5mvTbcBQPK1ciL9VxbosAjfzIX50FUOOp93CVG9ZnxqHi6NLrL18kCcHKetLXOee2zkMr90PLuoJ5PN1smDAu0IDQ0lCKYeRfLfvwfPcEZe9O6khzs757emXIcLFJK47qx6ywmNe9a0ddT52Hdxtq/FujvGnKLrnHeny0CBpcGzzHpO2lEtLl8B2d5fOK67fBWs= X-MS-TrafficTypeDiagnostic: HE1PR0502MB3659: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0502MB3659; 20:j54NXDogde+pIKVDSyH4c4u5mIqh2VWaf5ZNUkFOWJ4P+uZSbqGsLuArwzNGP1H/ZOyfYzzlAZM/6+6VW1DQhWIDZMphsB7xAopFuMfBPsvSOLvC54W9rqZxsJj/mJ5FNH+3SUIzwrKTU1LMqg6y4PxJ5NF3RQXRTojNdld1cTl7hNwi5Yd7ZxTSSYN84AktZHo/vgYa7RB2b5Q1TfDgXf5y2Jl5zek/0QZcljMj0yXAXnqca7QaEslwuFeVAJHnBwDufhBOAVVuGcqphcvOOMP7Z99HA2EUrwz/FF1qFPbDSmfJ3a0MvtpMcCVJbtUTEk1+AJCW0SjtbDRkep8cbH52pZfbYAzgJyAZhFIMOwwG1u/BhW7wdjK2dfg1Fqp/YA5tjWTLW9RETWZdQCZw82Jo+4J113kXSqPJtOexqGVd1BCTiyXWN5GN8f9B9uDTCAFIoHtJ8AhijVpYT64p85UFnUWvQEh0D6AVSOVdthK2ADgCfxtma3r05sYGg59p; 4:Q20Ma7x1QbRdVQHR1fO2La/jk72MH+WH2EV/AvW2NvrxTtdj4n/wRZQbzM0L1RUtSD4bDMcPbIjZhGpRuHrp07Jcovut+sbHW7oYeE26WpvK5Rpx2fa5TRDhlV1b9ZOWzEmU7tEhHzNurcv/l9ou6eg5G33+hEXNLRzzaRlx5snSMy0W8HqPpXSc/nOGgTlK8wVjJx91QmZVxuK3VwE03LP/aDVphawoHQ9iuZ8sbRrIYqpFUZvNm0ZutK/jAmJTzuKtY32lmoR89oCOVOy+bg== 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)(93006095)(93001095)(10201501046)(3231023)(3002001)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123555025)(20161123560025)(20161123564025)(20161123558100)(6072148)(201708071742011); SRVR:HE1PR0502MB3659; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:HE1PR0502MB3659; X-Forefront-PRVS: 052670E5A4 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(376002)(346002)(39860400002)(396003)(189003)(199004)(478600001)(36756003)(16586007)(316002)(3846002)(7736002)(6116002)(97736004)(50226002)(25786009)(386003)(16526018)(33026002)(69596002)(68736007)(8936002)(2906002)(86362001)(81166006)(8676002)(81156014)(105586002)(50466002)(48376002)(106356001)(53936002)(51416003)(7696005)(52116002)(76176011)(6666003)(4720700003)(6916009)(4326008)(5660300001)(21086003)(305945005)(2950100002)(66066001)(47776003)(55016002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0502MB3659; H:mellanox.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A: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; HE1PR0502MB3659; 23:7dGcCl7kg8OLUL4WEsI8EE7ccfRHmFHxIqNUq22?= =?us-ascii?Q?Yq/Ckdk9QZfm7aRCmM3kbBsJM/cJipF5tD16C8K1A57PPIMDKaG43toYS8r+?= =?us-ascii?Q?IKqlB8AfD1HabsWOR5t8M6d428QJouvUZonzSrxTFUqCKcZg4fhCgwI+Bhtq?= =?us-ascii?Q?n+PHZFp+KvczWemj4roXq8Jk7/TANpEsYOHRTUX1w1CGVx+EhTEQu4xe/TNM?= =?us-ascii?Q?fHPtjmGSFKJLW5SJhWELdUfEq06picPWl9qDOq8YH6He2aDK7KOBw7xyK3su?= =?us-ascii?Q?7DcM0QRMvHyH2tgoohtRS1IYAqcvZk37B+0x2H3eSBoefLcQn8AyqItUgdmH?= =?us-ascii?Q?YSKCZa9txx3cqv03ML5571Fp6OKrdsD07rY+dSO5g2WUGOIgYmxuAMhmRoDI?= =?us-ascii?Q?H4999d4sZRtr7Yee1exFh6T74Feq6Npsw0q70Me329NmD20a/l1Ea+0UpeYR?= =?us-ascii?Q?5B8W//XolCPq/ZHG2fbR2n6bGVypeWOgvY32dNVo58ool+T+CVpVnmfZyY68?= =?us-ascii?Q?2lagVhS8IplcfROHtK6BxGoX682EXMrQKNo1hHbuQfKxSYn1j/orHDkkQOWv?= =?us-ascii?Q?3gjDf8xVuiNxQE5uFKRLEynmXWS3OAV9ockREXY63FEUz2AJOoaVgIruoar+?= =?us-ascii?Q?2btjTZ5dnD2IBROvoZp7EB/hO0Db/Z+cxyzap47HykSEH/jQhcBXNBMnMwOm?= =?us-ascii?Q?zlEejmcR0F9eKGdU1y10DbnhL4fkVzvR2lCJNaaXcCRddE8NKHDzZLlp2St7?= =?us-ascii?Q?KMmT/xfaPByadEbIWaQ7QA5f4+5tvlurjhtOoWWl6m5OOmzhT7q+nyTkGjVM?= =?us-ascii?Q?oq4rNTMUqV4bG3lDzW3IeXn8gW11gHqprEMNxd1dkPmFa+3ZubB0PeaDj8qf?= =?us-ascii?Q?SWJ0PGSqrtjJzbzLwAGqfNgLfAnz+EMFcv44vfwPLKh+hx58ucI5m36h2Ftp?= =?us-ascii?Q?dJ5wQFppzO1H8c2ZYAj6fZ+e0/C6e0V0RcreJawmm+t+AoeVEUSryJanrjUU?= =?us-ascii?Q?Z+Y8UOgJUX//VAVWN16tbDuUhf+cMyt+qJQ1nS4O4imR0SLtFYq0t5J6znkh?= =?us-ascii?Q?dXaBICNGaV2S1j3H5Fjw8VQsqnvpFA3Hy12bct09eUiqUzzGXruVGqWpcUAT?= =?us-ascii?Q?ZwBmu3Jctavw=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0502MB3659; 6:zRBbIYkhH2WcUbRDGWZ1NL4fK4drp7x9azEoHJe2amYjqRyLrEtQ7QDq807IDvXP+BQJoJX3Z9onsqOdWHijq2OhvfO+7XxxotnKc0Bq5YRsujIbPVIEA1tiCYqlVk1TDzV17AKIcCJ3oT9TynkkiKCXMetKpqETv7vFCArj7fmav/nEeI1B4wPe6Qer1KvW6Eg2fu+IkfoomnxTM5l2+eJ91gbpmos28sfL+jcUMW6swYBnDrX3aW0ieOmygOIEnmuZq7zN5/dlRERQcYSKxqMQs+hNwnXt3sNkWGevhmjDEcvSOgD2VWYUpgR7Y7LeerS0pRdcFaKXr2/ZP2HsCJ9hTqExTjaM1DjLzVbo7I4=; 5:zoNS0WAMSQByJhuaCGuqLDH5BbcSgZ+ci0LdQaZ+isurVoOPIaWMTpBgKKmc+sVBMUObFq/6XVB/o9IE+VA8ZMIFsb8Xj6erwHz8YWz1kYa0wMtSV7HhEQ22/6C+upSvOHDmBMDFAUzup7hkdAKsHPM3eUM/cg+WRjBI4xkZvQA=; 24:XZRt259qtA3Yt3pa0MO89XNzLC7jwIy3p3GRU2iPoSbwBDuJBstFs+ypoq0BjYTNwmT7/ftfCnoDhPnaf7ZGjuV2mFVyNDLl3t68CtopoIM=; 7:itechfyTXp5gdk3u7gKXoD7slXoviSC1viwgyyZ8JOw/Fo3SpxBAAtuDKrOslZMf/xg+QHaMS1jxtvBOMENL825Egiw1dcEdSYqp66gqZ++BcOLVN5PHmaZ+gmmbP3WxV9MRFNwpLytVz08rxIO94g6ORjgrRWrWGHoQ5FnmGlw5ezD8Z32zBa2Apdcca9vnPV6vSCsy87xk2NXDGhRweOwhpggWeGD4eZZ+Uz3XdreRMDU5722CS+uE9ruDzaQC SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Dec 2017 17:14:54.0362 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: dbe14df3-ae51-4f87-bf78-08d5470405da X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0502MB3659 Subject: [dpdk-dev] [PATCH v3 3/3] net/failsafe: improve Rx sub-devices iteration 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, 19 Dec 2017 17:14:56 -0000 Connecting the sub-devices each other by cyclic linked list can help to iterate over them by Rx burst functions because there is no need to check the sub-devices ring wraparound. Create the aforementioned linked-list and change the Rx burst functions iteration accordingly. Signed-off-by: Matan Azrad --- drivers/net/failsafe/failsafe.c | 5 ++++ drivers/net/failsafe/failsafe_ops.c | 1 + drivers/net/failsafe/failsafe_private.h | 5 ++-- drivers/net/failsafe/failsafe_rxtx.c | 50 ++++++++++----------------------- 4 files changed, 24 insertions(+), 37 deletions(-) diff --git a/drivers/net/failsafe/failsafe.c b/drivers/net/failsafe/failsafe.c index 6bc5aba..d230c37 100644 --- a/drivers/net/failsafe/failsafe.c +++ b/drivers/net/failsafe/failsafe.c @@ -55,6 +55,7 @@ { uint8_t nb_subs; int ret; + int i; ret = failsafe_args_count_subdevice(dev, params); if (ret) @@ -72,6 +73,10 @@ ERROR("Could not allocate sub_devices"); return -ENOMEM; } + /* Initiate static sub devices linked list. */ + for (i = 1; i < nb_subs; i++) + PRIV(dev)->subs[i - 1].next = PRIV(dev)->subs + i; + PRIV(dev)->subs[i - 1].next = PRIV(dev)->subs; return 0; } diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c index e16a590..fe957ad 100644 --- a/drivers/net/failsafe/failsafe_ops.c +++ b/drivers/net/failsafe/failsafe_ops.c @@ -294,6 +294,7 @@ rxq->info.conf = *rx_conf; rxq->info.nb_desc = nb_rx_desc; rxq->priv = PRIV(dev); + rxq->sdev = PRIV(dev)->subs; dev->data->rx_queues[rx_queue_id] = rxq; FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) { ret = rte_eth_rx_queue_setup(PORT_ID(sdev), diff --git a/drivers/net/failsafe/failsafe_private.h b/drivers/net/failsafe/failsafe_private.h index 4196ece..54b5b91 100644 --- a/drivers/net/failsafe/failsafe_private.h +++ b/drivers/net/failsafe/failsafe_private.h @@ -62,8 +62,8 @@ struct rxq { struct fs_priv *priv; uint16_t qid; - /* id of last sub_device polled */ - uint8_t last_polled; + /* next sub_device to poll */ + struct sub_device *sdev; unsigned int socket_id; struct rte_eth_rxq_info info; rte_atomic64_t refcnt[]; @@ -100,6 +100,7 @@ struct fs_stats { struct sub_device { /* Exhaustive DPDK device description */ + struct sub_device *next; struct rte_devargs devargs; struct rte_bus *bus; struct rte_device *dev; diff --git a/drivers/net/failsafe/failsafe_rxtx.c b/drivers/net/failsafe/failsafe_rxtx.c index 178294c..0ebf06a 100644 --- a/drivers/net/failsafe/failsafe_rxtx.c +++ b/drivers/net/failsafe/failsafe_rxtx.c @@ -94,36 +94,27 @@ struct rte_mbuf **rx_pkts, uint16_t nb_pkts) { - struct fs_priv *priv; struct sub_device *sdev; struct rxq *rxq; void *sub_rxq; uint16_t nb_rx; - uint8_t nb_polled, nb_subs; - uint8_t i; rxq = queue; - priv = rxq->priv; - nb_subs = priv->subs_tail - priv->subs_head; - nb_polled = 0; - for (i = rxq->last_polled; nb_polled < nb_subs; nb_polled++) { - i++; - if (i == priv->subs_tail) - i = priv->subs_head; - sdev = &priv->subs[i]; - if (fs_rx_unsafe(sdev)) + sdev = rxq->sdev; + do { + if (fs_rx_unsafe(sdev)) { + nb_rx = 0; continue; + } sub_rxq = ETH(sdev)->data->rx_queues[rxq->qid]; FS_ATOMIC_P(rxq->refcnt[sdev->sid]); nb_rx = ETH(sdev)-> rx_pkt_burst(sub_rxq, rx_pkts, nb_pkts); FS_ATOMIC_V(rxq->refcnt[sdev->sid]); - if (nb_rx) { - rxq->last_polled = i; - return nb_rx; - } - } - return 0; + sdev = sdev->next; + } while (nb_rx == 0 && sdev != rxq->sdev); + rxq->sdev = sdev; + return nb_rx; } uint16_t @@ -131,35 +122,24 @@ struct rte_mbuf **rx_pkts, uint16_t nb_pkts) { - struct fs_priv *priv; struct sub_device *sdev; struct rxq *rxq; void *sub_rxq; uint16_t nb_rx; - uint8_t nb_polled, nb_subs; - uint8_t i; rxq = queue; - priv = rxq->priv; - nb_subs = priv->subs_tail - priv->subs_head; - nb_polled = 0; - for (i = rxq->last_polled; nb_polled < nb_subs; nb_polled++) { - i++; - if (i == priv->subs_tail) - i = priv->subs_head; - sdev = &priv->subs[i]; + sdev = rxq->sdev; + do { RTE_ASSERT(!fs_rx_unsafe(sdev)); sub_rxq = ETH(sdev)->data->rx_queues[rxq->qid]; FS_ATOMIC_P(rxq->refcnt[sdev->sid]); nb_rx = ETH(sdev)-> rx_pkt_burst(sub_rxq, rx_pkts, nb_pkts); FS_ATOMIC_V(rxq->refcnt[sdev->sid]); - if (nb_rx) { - rxq->last_polled = i; - return nb_rx; - } - } - return 0; + sdev = sdev->next; + } while (nb_rx == 0 && sdev != rxq->sdev); + rxq->sdev = sdev; + return nb_rx; } uint16_t -- 1.8.3.1