From patchwork Wed Jan 10 09:17:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shahaf Shuler X-Patchwork-Id: 33386 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 C8E221B1D8; Wed, 10 Jan 2018 10:17:45 +0100 (CET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0073.outbound.protection.outlook.com [104.47.1.73]) by dpdk.org (Postfix) with ESMTP id 05C761B1C4 for ; Wed, 10 Jan 2018 10:17:30 +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=1ODVbhWct+CY67yXGjWTuMs3T81e+C7zAEd/U8OgxoQ=; b=s6b2u93pPDpobmpSOdN5pHko2HcipneDEhPtjxH9dV4+nKBedMm47tvT94UC4BXETqkgCTI4JOoxXpAb2ykppELUPPRwkn5F8ZfLMjk7jP0l+GSJqk2uVgKpNWvJ5nHBh2yEFgoEC6T69ZwCfSPJ9vfzBHPAjWSeZdZR4sYRoRY= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=shahafs@mellanox.com; Received: from mellanox.com (82.166.227.17) by AM4PR05MB3140.eurprd05.prod.outlook.com (2603:10a6:205:3::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Wed, 10 Jan 2018 09:17:28 +0000 From: Shahaf Shuler To: nelio.laranjeiro@6wind.com, adrien.mazarguil@6wind.com, yskoh@mellanox.com Cc: dev@dpdk.org Date: Wed, 10 Jan 2018 11:17:01 +0200 Message-Id: <11bc8d8ca32307daf82753e69aa52e2414dd7644.1515575671.git.shahafs@mellanox.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: References: MIME-Version: 1.0 X-Originating-IP: [82.166.227.17] X-ClientProxiedBy: VI1PR0202CA0030.eurprd02.prod.outlook.com (2603:10a6:803:14::43) To AM4PR05MB3140.eurprd05.prod.outlook.com (2603:10a6:205:3::17) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 334548df-070d-42fd-45ad-08d5580af946 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(5600026)(4604075)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603307)(7153060)(7193020); SRVR:AM4PR05MB3140; X-Microsoft-Exchange-Diagnostics: 1; AM4PR05MB3140; 3:+dcqHQdG+7RAt6DNfg56WLw6ppIDeOWOT+2Eor/+cTxFZlellAz7ctf3IOg4MzbKTs0tCmFGxLSc0hE/WN05i+2KBoA346AHqZBDp/WIg9EeoikrLQdfoL3W2/u5NMT4dQb18i9KZ1Ufm+R0a5+7K5DO3PYqgTTAdNOeGx/5MPZkYM9iC3wJQVkgfmV24WS5MzqLwOi7G75BOOcwhRhM5hUnGOMQtWOQPrsojvlGh/qsH0Zd5SP9/j0LhOUWVqX2; 25:TvKMjDUuxmLEnQxLdjNZLeKExxB+D/+oZvmWHd0S6vn8rBGO0WnPSfYlpWHIf+lRCOCCj9GoXJ3XKUYJV5/LIoQHWNzdfSm8N3/A86WRFggRdzZx/nm8IXLfFvvMeUYDszBrguJHKc+Iz7VUQ/nuW8sH76QK8nazuLDFhNBv7K0fqApvVdhsE6rKlNbw6GgacEnqb9EUWWD9F/GrnZzdTVjFnIFdlrkj2KSEHxf24pywiyxp+O2ik14U/YA5pc6ugemlgzQJ2T3P/WmdJq+T5NS8LkCQ63CrMeov2TCtP/HubgJtnnUsFzVmaMClBJ4xKMGxHYUhh86445VQel3nKw==; 31:hY3IvjGNHW8fFpyz20JM2oTIsrxMsnrt3QO2jJY4t7CIl1BIfV3j28AGXJA63j+cBL46k0ZBxoqURQpzqPzt8o0V4Wgx+Lkukk0wFpnSNw92epvjG9egIs33qkdd/+cLPm7pItLJLfMblgGWNOrMxdu5WL7xPrdt56LDo+BUamk6QkizSuarqP46B6jWm7QgSptrg+eoqd854l7vrgCvDRg3PzYOXSxDOOdgp9mVXrE= X-MS-TrafficTypeDiagnostic: AM4PR05MB3140: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM4PR05MB3140; 20:4CrcV+Y8zNUFwt63I8QSgXhYm6D7Zazl3Gph8XCLdq77JK8ZMbgHFKrbg0Fib8rxdh77W9xS3Q+2AhozJK0XhB9xcq/P2kKweryduzZtI/2Z0Y5fNG/S0riIe7+ovxa+NdX4Ro9uZU+5W5U0AB5gvmsrg22cyx9nPbgJ3VQxVNlyfPpz2uWeCthc68EqFzotFp8b/FgDCGhMKNXF183z6XcmS54MvKkIg5kUoBbV9TRNs6NvUdjfTEa3K4OVznFOTTfF7K1+CMKkBKacP0Cha+DJrvTa8u/qBl6gGQgjuWCkGXDaFVgoh9DS2ZGtA3tqvtf7PrgxNbxDNCJ5tBenP0opI2ShIsYt0S2x/Htr/xTkqt8bSiq5xFcDGkhe9jt1haHnBmBpboXBhiwjJRs0WK9YiR/B1dSOSPfT/6tW6zOLaDUI5tdp6bQDBvsJ8U2U1GxSrtub+frSMGoX+/BP7HAYXvaONuRLLDt5yKLI9/wWre8MQ2RDzCySZchz9Rlj; 4:Ru57P5PhWPWR1x73iVG/6p2DLhT80KPLwI9pAdtmgC9hmKQjCZ8SABGDZx6eiSoVsr5yaJfYjYqM/4awTlUt3cHd7EUK27SGDaLUrPmvWfy6dvqbdhQDWSKwrb9byiQQxs7t1OYuwB/w/PTjAwLlH547J5NdipgoLU7B/73z64Ef1dgz3OUvVjaUu09M1tr4dz+V7ohCQ9gWZKFMy9dJxNHxQJbFTh9gFvvj4UaMM2Yq795/DPs8eBrj4QZ2XyrhSKX12n5JKk03ueDfvq4IXw== 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)(93006095)(93001095)(3002001)(10201501046)(3231023)(944501119)(6055026)(6041268)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(20161123564045)(6072148)(201708071742011); SRVR:AM4PR05MB3140; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM4PR05MB3140; X-Forefront-PRVS: 0548586081 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(979002)(396003)(346002)(376002)(39860400002)(39380400002)(366004)(189003)(199004)(105586002)(16586007)(118296001)(97736004)(47776003)(66066001)(48376002)(50466002)(478600001)(106356001)(81166006)(25786009)(8676002)(53936002)(68736007)(81156014)(386003)(50226002)(4326008)(8936002)(316002)(16526018)(59450400001)(7696005)(51416003)(7736002)(52116002)(5660300001)(305945005)(6666003)(6636002)(2950100002)(76176011)(55016002)(2906002)(6116002)(3846002)(36756003)(33026002)(21086003)(69596002)(86362001)(575784001)(309714004)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3140; 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; AM4PR05MB3140; 23:Zeo4IVZVXcilQiKL3YH10ThZj9jfRyhhB+Qh7MrYC?= qiqAmrUvhD3JV8DHQxqJYj5hD1eK8JJW6NFAP5l1y1VrvT0A32dqgEQG6f5J/XTO0+p2qWPWsdlaxRDXKEwPcsBSeByzT1OmQ9NU2lncDNEOUp1/4IxHbetP9D3vmmmxC3jaYUfmmVCb5Gk7hq3FKB85DFr9uTMea+p+iggX7S3QOL4+Pc/0PrN+qHbMA6Y1m2QJ+g9dZ/zxDUkplOOUY9jLMFBzyy0vLCnWUNiqKEElnsdms3QF8LON+Ds8J4IZm2EvKL9trT2cPwtvivpYw8sQlgMxuh6rdTgwQrPqtk4An6H7wmGbncf4/apclNZRpPoxtXAcbIaaNl9YfvSCCb2rOt9yHf6v4df6n1FOEtJQq7wzPdYGqSNT5lEtL2Q6fOF7R/cnaiogX75/C203K8BNlE1l7Fpw45xAj37SEpllebMbF0PmOjvcvZihGhWHoXgwmbLIw8ndRNThYsA0Zq81KWcPVxvWl2EoGKZEiYx9JtcNJE+KAcWuk04d0vB7vkFV41knVQJQTLWYWT34HphsvcJKXqoITA7Bua/xY4MIh9oXKoZ37uIm6ow2D1PBboNrxqG8JV3k+F/tZEr5qN59PB96JI0Ox3+ODKvt9MTJNPMeaDYfKZPV8/nLL7dOpymRvRjugDJCtnutSkUHwSZK9n7ETyBwE+AJf3Q9a2j8QfjeNtk8t6y4sN/7sY2eF+P07e5MKmrqhZWiSHO+UIDk0Cks9ApzMf79EmqF3rpimP+SYdLISfO+55yngaFkNqI1QUpH3Jsg8PPgtNNTHFlbi3aztYC3CU0ISpyKaX3s91Fz4Gok7UmLMWchy4fztSUEvPWXq3S65OZhmmqbxyDEcWbR5HhhT1SlmXX547eQxGpfK1O92e6k6Mhvc3vMFJv9d3EjdMEuHKzRAa7DzcdyR3vRbkSf9BJCU4blNBPV+gK2QWZr+ABaQeeCu1xSkxJSNuOidN0RwPvs+JLkbBto8eKpS9dXX2JST9DTyccAWS4R/X0a19eVcEK45GCN5mh6HM3DoKcyCH0TAyAKHSOfeHnkoITXHw8ot824X4I2iZg+5hiOaSHjJBO89f4tFLRTPIr+UJmPTFrQgEWtXJwCwkMsyrpi8Z+lP9xSiAdUhun8uRKVTbKJN0zyg41RmNae97gxAcaAV76k2GO4mOyr9Rr2A/62Sd+UokM1Fgq1MRKSa9O40HF8dVN0mFA/rIuT2fHEWy5/wsTzdkTXpdZuXS2aLMLR2SeIMxhWlOm5rgvg2kGT9BMxP3lf8vANpA= X-Microsoft-Exchange-Diagnostics: 1; AM4PR05MB3140; 6:s59/wA7s6u2hot7x+m09e7mhES3l34QMwqN3g5L/8Pz3Vm8upN+TEi0iRi4qXoL7SHLwKmCLcLaWf9ThA1cX7hfk1DihO84TGClA5JvJof7OVASexOUUj679Hz8yej5Ut3Cx38+4BdYfIyuDiNG+XyllKEHJMuVt+hDVKGENdpgMWn8PMw7vvPtvEXQgea+RkZmsudIjRXjqgtNOiHvOy+5WU4mRHJWZjH3hl5UwXxTmefpWHvO42F9VrmtAu0ZjK2u12Ff0S8QmmHV6EqpchWok0/a4ssWeAK9qkLEP3/veCQvNEuKiPi1SHDA/sidVUGu1ST3NL5W9HyFoqvO3qEMDbLEB00vCUsj5Af5ZX9E=; 5:QR/yHxYgi+O1LTq1Pbn3I1roDqfARl3h0iXxFO1EVIPxOPrcwQe8fSxrABFNfVVROc19/WRBegyQHG0XbXGWrEX9ADVoE5orxwRGHJGl1TjEfo2PViiKfd+Pg5wUbrsGF6WJ+/F+LOOkd/pJLWgGUJh72pmLUTYgiLX6X0KDIZo=; 24:GsX0QfZwILRrEgDPx087ucPwrai6jNOnkdeM2sUfmJpuOhr2MCpbpVIkU22qApA8XQJfgaV1WyfhQzQdJ0lthyNsw5eDASpZxMaxDdTW2i0=; 7:j7PecpqOc23xPMr2eHruE7rAqrTTHeokUyBcRA74VpCuOHGrLAhx5JcSwb3xMRjB18dsEqBSRsBWzt78RXrokasvprjCSiSVHCLaMzWLXSsWqtkMxWxuFpUAy0j6AdzZVoO4+hAmrr/xUMczF/hiPxyFZSaLGBEcLBXplLTWwWSPuKevRv4tOS/J4+TT/xNOG2DBJbgmZyFvvNxglmIM5ZEzkFF1hZ4IDjuRoHPPs1PeTx7cvQ0ghsT+qGqDQWg3 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2018 09:17:28.7373 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 334548df-070d-42fd-45ad-08d5580af946 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3140 Subject: [dpdk-dev] [PATCH v3 5/7] net/mlx5: convert to new Rx offloads API 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" Ethdev Rx offloads API has changed since: commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API") This commit support the new Rx offloads API. Signed-off-by: Shahaf Shuler Acked-by: Nelio Laranjeiro --- drivers/net/mlx5/mlx5_ethdev.c | 23 +++++--- drivers/net/mlx5/mlx5_rxq.c | 106 +++++++++++++++++++++++++++++++----- drivers/net/mlx5/mlx5_rxtx.h | 3 + drivers/net/mlx5/mlx5_vlan.c | 3 +- 4 files changed, 111 insertions(+), 24 deletions(-) diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c index 7b1b7aa0e..278a4dfc3 100644 --- a/drivers/net/mlx5/mlx5_ethdev.c +++ b/drivers/net/mlx5/mlx5_ethdev.c @@ -553,6 +553,10 @@ dev_configure(struct rte_eth_dev *dev) !!dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key; uint64_t supp_tx_offloads = mlx5_priv_get_tx_port_offloads(priv); uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads; + uint64_t supp_rx_offloads = + (mlx5_priv_get_rx_port_offloads(priv) | + mlx5_priv_get_rx_queue_offloads(priv)); + uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads; if ((tx_offloads & supp_tx_offloads) != tx_offloads) { ERROR("Some Tx offloads are not supported " @@ -560,6 +564,12 @@ dev_configure(struct rte_eth_dev *dev) tx_offloads, supp_tx_offloads); return ENOTSUP; } + if ((rx_offloads & supp_rx_offloads) != rx_offloads) { + ERROR("Some Rx offloads are not supported " + "requested 0x%" PRIx64 " supported 0x%" PRIx64, + rx_offloads, supp_rx_offloads); + return ENOTSUP; + } if (use_app_rss_key && (dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key_len != rss_hash_default_key_len)) { @@ -671,15 +681,10 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info) info->max_rx_queues = max; info->max_tx_queues = max; info->max_mac_addrs = RTE_DIM(priv->mac); - info->rx_offload_capa = - (config->hw_csum ? - (DEV_RX_OFFLOAD_IPV4_CKSUM | - DEV_RX_OFFLOAD_UDP_CKSUM | - DEV_RX_OFFLOAD_TCP_CKSUM) : - 0) | - (priv->config.hw_vlan_strip ? DEV_RX_OFFLOAD_VLAN_STRIP : 0) | - DEV_RX_OFFLOAD_TIMESTAMP; - + info->rx_queue_offload_capa = + mlx5_priv_get_rx_queue_offloads(priv); + info->rx_offload_capa = (mlx5_priv_get_rx_port_offloads(priv) | + info->rx_queue_offload_capa); info->tx_offload_capa = mlx5_priv_get_tx_port_offloads(priv); if (priv_get_ifname(priv, &ifname) == 0) info->if_index = if_nametoindex(ifname); diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index 057156d84..950472754 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -213,6 +213,78 @@ mlx5_rxq_cleanup(struct mlx5_rxq_ctrl *rxq_ctrl) } /** + * Returns the per-queue supported offloads. + * + * @param priv + * Pointer to private structure. + * + * @return + * Supported Rx offloads. + */ +uint64_t +mlx5_priv_get_rx_queue_offloads(struct priv *priv) +{ + struct mlx5_dev_config *config = &priv->config; + uint64_t offloads = (DEV_RX_OFFLOAD_SCATTER | + DEV_RX_OFFLOAD_TIMESTAMP | + DEV_RX_OFFLOAD_JUMBO_FRAME); + + if (config->hw_fcs_strip) + offloads |= DEV_RX_OFFLOAD_CRC_STRIP; + if (config->hw_csum) + offloads |= (DEV_RX_OFFLOAD_IPV4_CKSUM | + DEV_RX_OFFLOAD_UDP_CKSUM | + DEV_RX_OFFLOAD_TCP_CKSUM); + if (config->hw_vlan_strip) + offloads |= DEV_RX_OFFLOAD_VLAN_STRIP; + return offloads; +} + + +/** + * Returns the per-port supported offloads. + * + * @param priv + * Pointer to private structure. + * @return + * Supported Rx offloads. + */ +uint64_t +mlx5_priv_get_rx_port_offloads(struct priv *priv __rte_unused) +{ + uint64_t offloads = DEV_RX_OFFLOAD_VLAN_FILTER; + + return offloads; +} + +/** + * Checks if the per-queue offload configuration is valid. + * + * @param priv + * Pointer to private structure. + * @param offloads + * Per-queue offloads configuration. + * + * @return + * 1 if the configuration is valid, 0 otherwise. + */ +static int +priv_is_rx_queue_offloads_allowed(struct priv *priv, uint64_t offloads) +{ + uint64_t port_offloads = priv->dev->data->dev_conf.rxmode.offloads; + uint64_t queue_supp_offloads = + mlx5_priv_get_rx_queue_offloads(priv); + uint64_t port_supp_offloads = mlx5_priv_get_rx_port_offloads(priv); + + if ((offloads & (queue_supp_offloads | port_supp_offloads)) != + offloads) + return 0; + if (((port_offloads ^ offloads) & port_supp_offloads)) + return 0; + return 1; +} + +/** * * @param dev * Pointer to Ethernet device structure. @@ -241,7 +313,6 @@ mlx5_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, container_of(rxq, struct mlx5_rxq_ctrl, rxq); int ret = 0; - (void)conf; priv_lock(priv); if (!rte_is_power_of_2(desc)) { desc = 1 << log2above(desc); @@ -257,6 +328,16 @@ mlx5_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, priv_unlock(priv); return -EOVERFLOW; } + if (!priv_is_rx_queue_offloads_allowed(priv, conf->offloads)) { + ret = ENOTSUP; + ERROR("%p: Rx queue offloads 0x%" PRIx64 " don't match port " + "offloads 0x%" PRIx64 " or supported offloads 0x%" PRIx64, + (void *)dev, conf->offloads, + dev->data->dev_conf.rxmode.offloads, + (mlx5_priv_get_rx_port_offloads(priv) | + mlx5_priv_get_rx_queue_offloads(priv))); + goto out; + } if (!mlx5_priv_rxq_releasable(priv, idx)) { ret = EBUSY; ERROR("%p: unable to release queue index %u", @@ -264,7 +345,7 @@ mlx5_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, goto out; } mlx5_priv_rxq_release(priv, idx); - rxq_ctrl = mlx5_priv_rxq_new(priv, idx, desc, socket, mp); + rxq_ctrl = mlx5_priv_rxq_new(priv, idx, desc, socket, conf, mp); if (!rxq_ctrl) { ERROR("%p: unable to allocate queue index %u", (void *)dev, idx); @@ -875,7 +956,8 @@ mlx5_priv_rxq_ibv_releasable(struct priv *priv, struct mlx5_rxq_ibv *rxq_ibv) */ struct mlx5_rxq_ctrl* mlx5_priv_rxq_new(struct priv *priv, uint16_t idx, uint16_t desc, - unsigned int socket, struct rte_mempool *mp) + unsigned int socket, const struct rte_eth_rxconf *conf, + struct rte_mempool *mp) { struct rte_eth_dev *dev = priv->dev; struct mlx5_rxq_ctrl *tmpl; @@ -902,7 +984,7 @@ mlx5_priv_rxq_new(struct priv *priv, uint16_t idx, uint16_t desc, if (dev->data->dev_conf.rxmode.max_rx_pkt_len <= (mb_len - RTE_PKTMBUF_HEADROOM)) { tmpl->rxq.sges_n = 0; - } else if (dev->data->dev_conf.rxmode.enable_scatter) { + } else if (conf->offloads & DEV_RX_OFFLOAD_SCATTER) { unsigned int size = RTE_PKTMBUF_HEADROOM + dev->data->dev_conf.rxmode.max_rx_pkt_len; @@ -944,18 +1026,14 @@ mlx5_priv_rxq_new(struct priv *priv, uint16_t idx, uint16_t desc, goto error; } /* Toggle RX checksum offload if hardware supports it. */ - if (config->hw_csum) - tmpl->rxq.csum = !!dev->data->dev_conf.rxmode.hw_ip_checksum; - if (config->hw_csum_l2tun) - tmpl->rxq.csum_l2tun = - !!dev->data->dev_conf.rxmode.hw_ip_checksum; - tmpl->rxq.hw_timestamp = - !!dev->data->dev_conf.rxmode.hw_timestamp; + tmpl->rxq.csum = !!(conf->offloads & DEV_RX_OFFLOAD_CHECKSUM); + tmpl->rxq.csum_l2tun = (!!(conf->offloads & DEV_RX_OFFLOAD_CHECKSUM) && + priv->config.hw_csum_l2tun); + tmpl->rxq.hw_timestamp = !!(conf->offloads & DEV_RX_OFFLOAD_TIMESTAMP); /* Configure VLAN stripping. */ - tmpl->rxq.vlan_strip = (config->hw_vlan_strip && - !!dev->data->dev_conf.rxmode.hw_vlan_strip); + tmpl->rxq.vlan_strip = !!(conf->offloads & DEV_RX_OFFLOAD_VLAN_STRIP); /* By default, FCS (CRC) is stripped by hardware. */ - if (dev->data->dev_conf.rxmode.hw_strip_crc) { + if (conf->offloads & DEV_RX_OFFLOAD_CRC_STRIP) { tmpl->rxq.crc_present = 0; } else if (config->hw_fcs_strip) { tmpl->rxq.crc_present = 1; diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h index 5045f28f3..d85a570f4 100644 --- a/drivers/net/mlx5/mlx5_rxtx.h +++ b/drivers/net/mlx5/mlx5_rxtx.h @@ -253,6 +253,7 @@ int mlx5_priv_rxq_ibv_releasable(struct priv *, struct mlx5_rxq_ibv *); int mlx5_priv_rxq_ibv_verify(struct priv *); struct mlx5_rxq_ctrl *mlx5_priv_rxq_new(struct priv *, uint16_t, uint16_t, unsigned int, + const struct rte_eth_rxconf *, struct rte_mempool *); struct mlx5_rxq_ctrl *mlx5_priv_rxq_get(struct priv *, uint16_t); int mlx5_priv_rxq_release(struct priv *, uint16_t); @@ -273,6 +274,8 @@ struct mlx5_hrxq *mlx5_priv_hrxq_get(struct priv *, uint8_t *, uint8_t, uint64_t, uint16_t [], uint16_t); int mlx5_priv_hrxq_release(struct priv *, struct mlx5_hrxq *); int mlx5_priv_hrxq_ibv_verify(struct priv *); +uint64_t mlx5_priv_get_rx_port_offloads(struct priv *); +uint64_t mlx5_priv_get_rx_queue_offloads(struct priv *); /* mlx5_txq.c */ diff --git a/drivers/net/mlx5/mlx5_vlan.c b/drivers/net/mlx5/mlx5_vlan.c index 2ab865264..9443e4f03 100644 --- a/drivers/net/mlx5/mlx5_vlan.c +++ b/drivers/net/mlx5/mlx5_vlan.c @@ -196,7 +196,8 @@ mlx5_vlan_offload_set(struct rte_eth_dev *dev, int mask) unsigned int i; if (mask & ETH_VLAN_STRIP_MASK) { - int hw_vlan_strip = !!dev->data->dev_conf.rxmode.hw_vlan_strip; + int hw_vlan_strip = !!(dev->data->dev_conf.rxmode.offloads & + DEV_RX_OFFLOAD_VLAN_STRIP); if (!priv->config.hw_vlan_strip) { ERROR("VLAN stripping is not supported");