From patchwork Thu Nov 23 12:02:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shahaf Shuler X-Patchwork-Id: 31539 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 651802C16; Thu, 23 Nov 2017 13:03:18 +0100 (CET) Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10044.outbound.protection.outlook.com [40.107.1.44]) by dpdk.org (Postfix) with ESMTP id 840692BD0 for ; Thu, 23 Nov 2017 13:03:17 +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=qGIVWE5nVhLMp2YSDXVGaW/+6cyAqMmF9IfSi8/g3lE=; b=jMFerKl+KyhIf2tbYDJoqFFzcE11FiIcbrRVaM6HJBQvk1jjCV5KMxyHptw7a4HUmHs24eAfV3wiUUsNjFKlLHXezRaT5jm9W2/+5rRd9JwrN6b+S5HCl0jCPGFt9zuv2t64KxBLW3ZujZAoP6JoBNdKLMscOPQ4QsecNUGxxWk= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=shahafs@mellanox.com; Received: from mellanox.com (82.166.227.17) by AM4PR05MB3138.eurprd05.prod.outlook.com (2603:10a6:205:3::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.260.4; Thu, 23 Nov 2017 12:03:15 +0000 From: Shahaf Shuler To: nelio.laranjeiro@6wind.com, yskoh@mellanox.com, adrien.mazarguil@6wind.com Cc: dev@dpdk.org Date: Thu, 23 Nov 2017 14:02:51 +0200 Message-Id: <20171123120252.143695-6-shahafs@mellanox.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20171123120252.143695-1-shahafs@mellanox.com> References: <20171123120252.143695-1-shahafs@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [82.166.227.17] X-ClientProxiedBy: DB3PR0202CA0031.eurprd02.prod.outlook.com (2603:10a6:8:1::44) To AM4PR05MB3138.eurprd05.prod.outlook.com (2603:10a6:205:3::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: bbc82a1d-3466-4b30-5a77-08d5326a2ddb X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600025)(4604075)(2017052603199); SRVR:AM4PR05MB3138; X-Microsoft-Exchange-Diagnostics: 1; AM4PR05MB3138; 3:ffbMCoDz5O8IaTXoJlZ5fXiwMqKRHTZ/ot0KFpW1PxT7A3ozaYXUKW4mDaZ2DAjNT32hj2LtiW8VdJ9+NboZdqaLE/Poc4VRbG5qvrdRKlNlln3C9Yw6NZj4EJ4HKG3TnJ2tUbij0l9k8Si4m0/f9oFsBDApy8Vt5okzQ/f4TOK1HxxHoUGYeMBoYNA593BiN2ClwCFkc282yW6N/VopH3CCXNddkuhDLcnhc4Z+Op7zWVLUOA0harahYQRls8pN; 25:PlbXzq+QHSf5DaSbkDNQV66sUKjDsLrctho70Nm7we14rfW7sqy3Vcad2xsyEOzP3xCj7IuV4f8FGEzDXJmYD+vdI2ksPFmsf0nfzRJGOvFf1qdf0C7Ecx0TRi8fqWynSOFM5y+eOqlcuOEzMZQ6G+LcojO9mJuByqwGAcQxjLbOEs80x/ezqD6H9J4A733A2c81BHrEjRvWFrCsPl4aFMjO6Q+7jIp2fsvbdibhRsEO4OOiBBsW5Q/tP1+mSyrDQC1eyweThkXlGDdMEUqCsSBCXsEr5SujiZu5T8aGKgzYMetQmcGq6vhrjIZSG5h49LL/L3M67qZkQ+Be6Y5PvQ==; 31:+oSyHxDtH4ZowR8vqmMVT0ZekqMkUxNfQVNu2ba0k/6ZQX32QDYmjTWNbJvw2QVJyKgmBccVVHpZMOXB6WkN23w7RsAcu5EE6+YbTTxCp0AuCqUuawdfZxvpdbZrxE7DKmAUseQUF4tCUHoF1E8G3/zgHWtjKRodt95J3fez1pKHqfzvf/uCDdK5Go5hwSje4kzZG2263Cjzw5PCE4u3zOCSYUoDGZPBRSavbBNVntA= X-MS-TrafficTypeDiagnostic: AM4PR05MB3138: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM4PR05MB3138; 20:DwmU6jyTIXh++JMvDudbfSJZWUZtYkoTv2CdQREILrYuRHosQk/EumincrPoYobtm3T+s88qtT+/mtB8pUCJRQIjAgwoPNmsFwOU0YHHJ3q+EMSyUjAHzFrTxQGSgD7AFmSD+iOKRd1/KZkXNswmRbHygRjApdOf/LxdU0Ge6xNt3qsFAEXMP5Ia6U2SSxeIftsB+59Z4hYoIPpHDfM53AOR5uvVkr2OfiZIUmnMAOT5OHRAE3IWLFo9PMPPqzPPwlJdKDMzxdCNcYEDA3DsYsMvNRVwXd79sM1/kf8RId0JkSpz1Fu6mESPohiczlQnYqCmU/w1jwkqX48SRhBlBVZN0oAmO8sQQc14naylNw6k5IF2bZCEoilu5qWJ80dm+G8BnSeWJVFQtKoRx8q4QGZuvPUIv6kC1FSDMPVRFGaIwZRHaeLYPttGxhoJQetUTECyDIGy+8zhLEgWyYQA1qKFf2feV8FnV2HXUR6p2B2oKJ/ZgxB32Yol/iniNK/q; 4:VqB6sxL0AEnlxGQgbS7WBt3UWaTKCpcUViXGAYvmuiqgeBsiuoGbgdjDREsB06GKA/KdIs2Dz1hoP1w3BASX9sejyCQviGg3QDztwi5S/5iZmvGYZYz7gRgT1VQbq9RvZyxAzWgYAxmCEGlqVdShU4Itcl0aOBDsxZeBL4KEPpvNNZ/EO/JU+M5dl+MFP4A5wJdAQpMcCGaSXx3ikflzCvJ9nMYLs9EsQVTyZwLs6nuYwOncoB/+VInXQWW2+zHhwf1VDrFkggC6LBCdZIXDAQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(3002001)(3231022)(10201501046)(93006095)(93001095)(6055026)(6041248)(20161123558100)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123562025)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:AM4PR05MB3138; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:AM4PR05MB3138; X-Forefront-PRVS: 05009853EF X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(376002)(39860400002)(346002)(366004)(199003)(189002)(97736004)(33026002)(8676002)(53936002)(305945005)(68736007)(1076002)(189998001)(52116002)(4326008)(2950100002)(7736002)(2906002)(101416001)(6666003)(5660300001)(81166006)(76176999)(50986999)(81156014)(25786009)(478600001)(106356001)(47776003)(105586002)(316002)(5003940100001)(8936002)(50226002)(3846002)(69596002)(6116002)(16586007)(575784001)(55016002)(86362001)(66066001)(21086003)(48376002)(50466002)(16526018)(36756003)(33646002)(309714004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3138; 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; AM4PR05MB3138; 23:kyy7GVa79FUQlp1ybX4VQ36oYk2+c4WwPxAeSjmMg?= +TWCfMuvGLDsIXXWK9tGKnogO2QvtVKyoMnw9nBVQx5wzDEx58hYXL4OrzYrDjv+NiDsPY5vcCdwUw96nxhWaIGVFqh6ycyo8oQ4Al1CEZ10Jqz2aF7Zkl25wec7mYVqDUEOo7fgVnQ0IEPRFM2VC8DaQDxbGo8svYtV1MZHBfbRGWbtb4bz+zyH9Z/dv3jQDrr8Uw7QOpWK6g8JjczZ4JEXNxkG7ODtv3XOYBEDN6Saoc/Ia2Cu4SwJaS0ZzVheP5RCpkA2CYHp05mOji9eUhnKzJWaS7R+cLsAl5E605ZKndH0e6jfOKc902XQsr/7I/o78q/IPObJ+CTiLenQLsfy/mb6iKP5EDF/+eY1VJoJwG2j5Ufj42zZpNYBfR6+8uML2RinUalVitLKytdXkne1gI3sd96Dwml0zlv63khVMZmE+yA+lj8w09TjNPCbS0N6IG0kbOXeoKiwee3PB0cyRPnBccqwXR2FDc0fFN285pc+sgRCgwiYWgUhthv8nv1GK+/ar+PU/dVxOouAYPATI0sv1UHnKpJv8xo3MBl/gPnoJkhklov4UK7q6E1QrSYplLH1k4Prd7fCEE9ORFGPDuMGwbMFMs/yJUJOnhzADntk+2afw1Zd2t2eG7Q068qi6ptAXPy/Cjx4gU94FX1PM/q6tA76Yh+dDo6jrUWTMIx4KZ423Bf4M+ySuxF67Gr4NVPxK+lVpMZA+a1LTBsS7g/qRL8kA4g98tbCikOnUwqwcDLrzWdyi+bSSgX8m/I6lBv3lozxMB243vw4RazogUbynMc0g3uJNF5UZOxMOOgYlOcoZZp5l6MC0JZBIJ+B2doekr4M5dsDrneFVwlC7by8zJudWLZsmi14LvLE6ptGHqx6iGdAg1qD/NXum93cSy6NP3IwpO6KlumelkkJCss0bPGRSu8WPkFjgtJsfPT56UrL3t7fga0nVDhiOruSJUB05l28iSqjanYW9WQZ0kKQS6sYybzUXDeaqOCAMFcbKx2cnSLa6b7k27lh6bMvFfD+9+6OVsX2cY4mAyLmmw6D5s4SQQ/igAk7R2b7FwRIwjvj0hLMeUWNk3ak/myFQmvcbmrcBhbUxJJ2n/1KsWs0EbIj+YD3FgX6MsN8bcYp+TInCGn6IGjaXUwEuh0SOlajbIIOuLWwkHMT6DB X-Microsoft-Exchange-Diagnostics: 1; AM4PR05MB3138; 6:0i9iGTEVjBoeUrKkqbg5qaiymtKZ3I/iw8iPq5vka9jxD7Bt/h5X4RiQtG4W6rfq+P1CTYAIKJuybYdub8nc3Jtq8TnAU9LbcT66W1HliPrEYzkzCRzpS5v7ruaSR6lZ05IQQo/IgDDTJ8tzYkh2UCbH1lO0Kx6MsPfQ3BOvIQqw46zGXyU57CbmpPn5VQEjttAW45lm6G8pCly4RUQRWSSMxs2UkK+YCUyCT1ov6ZWZvb7bCAzuwkW5LAMiN0eYzY4Hk1cx2lo6Q81TsjDytkN9UZV9Bilk/1fXyYJuCMoMHpgVV9b2BY+eSFzKtQV1pGgZT8wGXQ47GZqtAMtxUL+xbbc5vJogmdvgr5adfNk=; 5:GUKjxbp+GeXq4zx5NTVDJmmx6n/cvLRPS0p+ob6wVlcIeTm3tjT40Cq6WKyUzwkXUftgVQUFgE7DZtZX8WxaLp2ALB5EHHF6Udoi3ZjgAcqmkTAVY5lYJTnXbRX+YX7kiF8sUu27SSCYmfb6/6aUS1Q8odgtErT44po7kebYeqc=; 24:0M1kZqNfOO8rkzXYZwzBq0BByfw/6gB1mlvx3x5c8YhOWkYz16CzN3B4haQrFwL51FBjWHwffJuKam4qr18JDhpk4lwmyKKExaK4vvGGkMQ=; 7:/Bnt+7TkNqQj2ZFSDef+vsdfe4dzSbTia3b3HZNv7Jirssj/dkhN5FrfHwosqkpevLPnz/qrP76U7D9KQbl9IVdd06boXGHQpjRvdrKzwZ150e7ZCjVr16S4rERExqqReZ7e6qTn9f0McUU/OdGRa6zKGA1+n+dP/PB2XXNaZ95JV3RpSmQM5QfqSKJGFyUYElvZbAbAVneHSSV5DwfIApWWdWayTwCqPpaxO6JtXVLCLgOZm7o/jfu/vczW2/ZV SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2017 12:03:15.3815 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bbc82a1d-3466-4b30-5a77-08d5326a2ddb X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3138 Subject: [dpdk-dev] [PATCH 5/6] net/mlx4: convert to new Tx 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 Tx offloads API has changed since: commit cba7f53b717d ("ethdev: introduce Tx queue offloads API") This commit support the new Tx offloads API. Signed-off-by: Shahaf Shuler --- drivers/net/mlx4/mlx4.c | 9 +++++ drivers/net/mlx4/mlx4_ethdev.c | 7 +--- drivers/net/mlx4/mlx4_rxtx.h | 1 + drivers/net/mlx4/mlx4_txq.c | 66 +++++++++++++++++++++++++++++++++++-- 4 files changed, 75 insertions(+), 8 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index f9e4f9d73..38c545b1b 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -99,8 +99,17 @@ mlx4_dev_configure(struct rte_eth_dev *dev) { struct priv *priv = dev->data->dev_private; struct rte_flow_error error; + uint64_t supp_tx_offloads = mlx4_priv_get_tx_port_offloads(priv); + uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads; int ret; + if ((tx_offloads & supp_tx_offloads) != tx_offloads) { + rte_errno = ENOTSUP; + ERROR("Some Tx offloads are not supported " + "requested 0x%lx supported 0x%lx\n", + tx_offloads, supp_tx_offloads); + return -rte_errno; + } /* Prepare internal flow rules. */ ret = mlx4_flow_sync(priv, &error); if (ret) { diff --git a/drivers/net/mlx4/mlx4_ethdev.c b/drivers/net/mlx4/mlx4_ethdev.c index 2f69e7d4f..63e00b1da 100644 --- a/drivers/net/mlx4/mlx4_ethdev.c +++ b/drivers/net/mlx4/mlx4_ethdev.c @@ -767,17 +767,12 @@ mlx4_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info) info->max_tx_queues = max; info->max_mac_addrs = RTE_DIM(priv->mac); info->rx_offload_capa = 0; - info->tx_offload_capa = 0; + info->tx_offload_capa = mlx4_priv_get_tx_port_offloads(priv); if (priv->hw_csum) { - info->tx_offload_capa |= (DEV_TX_OFFLOAD_IPV4_CKSUM | - DEV_TX_OFFLOAD_UDP_CKSUM | - DEV_TX_OFFLOAD_TCP_CKSUM); info->rx_offload_capa |= (DEV_RX_OFFLOAD_IPV4_CKSUM | DEV_RX_OFFLOAD_UDP_CKSUM | DEV_RX_OFFLOAD_TCP_CKSUM); } - if (priv->hw_csum_l2tun) - info->tx_offload_capa |= DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM; if (mlx4_get_ifname(priv, &ifname) == 0) info->if_index = if_nametoindex(ifname); info->hash_key_size = MLX4_RSS_HASH_KEY_SIZE; diff --git a/drivers/net/mlx4/mlx4_rxtx.h b/drivers/net/mlx4/mlx4_rxtx.h index 463df2b0b..528600a18 100644 --- a/drivers/net/mlx4/mlx4_rxtx.h +++ b/drivers/net/mlx4/mlx4_rxtx.h @@ -181,6 +181,7 @@ int mlx4_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, unsigned int socket, const struct rte_eth_txconf *conf); void mlx4_tx_queue_release(void *dpdk_txq); +uint64_t mlx4_priv_get_tx_port_offloads(struct priv *priv); /** * Get memory region (MR) <-> memory pool (MP) association from txq->mp2mr[]. diff --git a/drivers/net/mlx4/mlx4_txq.c b/drivers/net/mlx4/mlx4_txq.c index 7882a4d0b..91befb16b 100644 --- a/drivers/net/mlx4/mlx4_txq.c +++ b/drivers/net/mlx4/mlx4_txq.c @@ -184,6 +184,56 @@ mlx4_txq_fill_dv_obj_info(struct txq *txq, struct mlx4dv_obj *mlxdv) } /** + * Returns the per-port supported offloads. + * + * @param priv + * Pointer to private structure. + * + * @return + * Supported Tx offloads. + */ +uint64_t +mlx4_priv_get_tx_port_offloads(struct priv *priv) +{ + uint64_t offloads = DEV_TX_OFFLOAD_MULTI_SEGS; + + if (priv->hw_csum) { + offloads |= (DEV_TX_OFFLOAD_IPV4_CKSUM | + DEV_TX_OFFLOAD_UDP_CKSUM | + DEV_TX_OFFLOAD_TCP_CKSUM); + } + if (priv->hw_csum_l2tun) + offloads |= DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM; + + 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_tx_queue_offloads_allowed(struct priv *priv, uint64_t offloads) +{ + uint64_t port_offloads = priv->dev->data->dev_conf.txmode.offloads; + uint64_t port_supp_offloads = mlx4_priv_get_tx_port_offloads(priv); + + /* There are no Tx offloads which are per queue. */ + if ((offloads & port_supp_offloads) != offloads) + return 0; + if ((port_offloads ^ offloads) & port_supp_offloads) + return 0; + return 1; +} + +/** * DPDK callback to configure a Tx queue. * * @param dev @@ -234,6 +284,15 @@ mlx4_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, (void)conf; /* Thresholds configuration (ignored). */ DEBUG("%p: configuring queue %u for %u descriptors", (void *)dev, idx, desc); + if (!priv_is_tx_queue_offloads_allowed(priv, conf->offloads)) { + rte_errno = ENOTSUP; + ERROR("%p: Tx queue offloads 0x%lx don't match port " + "offloads 0x%lx or supported offloads 0x%lx", + (void *)dev, conf->offloads, + dev->data->dev_conf.txmode.offloads, + mlx4_priv_get_tx_port_offloads(priv)); + return -rte_errno; + } if (idx >= dev->data->nb_tx_queues) { rte_errno = EOVERFLOW; ERROR("%p: queue index out of range (%u >= %u)", @@ -278,8 +337,11 @@ mlx4_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, RTE_MIN(MLX4_PMD_TX_PER_COMP_REQ, desc / 4), .elts_comp_cd_init = RTE_MIN(MLX4_PMD_TX_PER_COMP_REQ, desc / 4), - .csum = priv->hw_csum, - .csum_l2tun = priv->hw_csum_l2tun, + .csum = !!(conf->offloads & (DEV_TX_OFFLOAD_IPV4_CKSUM | + DEV_TX_OFFLOAD_UDP_CKSUM | + DEV_TX_OFFLOAD_TCP_CKSUM)), + .csum_l2tun = !!(conf->offloads & + DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM), /* Enable Tx loopback for VF devices. */ .lb = !!priv->vf, .bounce_buf = bounce_buf,