From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10067.outbound.protection.outlook.com [40.107.1.67]) by dpdk.org (Postfix) with ESMTP id 95AD61B024 for ; Thu, 4 Jan 2018 19:55:08 +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=f0/SrPqWQDa/pDb3OWmqoIj443bIHZlnR47rjf3PRWE=; b=UxAq54y9ZzHhmIXBt8JFZA6IUdJlmgbUQXtfv3z7jjd9AmsrGgRYxN0nsT2cCJdl+6KPqldGx6+GckanN5na38LfXQgtFdRkejBvpDMuGFHrmnDRYKz0w2uycqJDVYOojp9Qo5icj1V4/htr22fZU4hFx8GopPY8+P/ArqxtNe0= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=motih@mellanox.com; Received: from mellanox.com (37.142.13.130) by DB6PR05MB3206.eurprd05.prod.outlook.com (2603:10a6:6:1a::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Thu, 4 Jan 2018 18:55:06 +0000 From: Moti Haimovsky To: pascal.mazon@6wind.com Cc: dev@dpdk.org, Moti Haimovsky Date: Thu, 4 Jan 2018 20:54:31 +0200 Message-Id: <1515092072-184434-2-git-send-email-motih@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1515092072-184434-1-git-send-email-motih@mellanox.com> References: <1515092072-184434-1-git-send-email-motih@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: AM5PR0701CA0024.eurprd07.prod.outlook.com (2603:10a6:203:51::34) To DB6PR05MB3206.eurprd05.prod.outlook.com (2603:10a6:6:1a::32) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 10771899-6310-423b-926a-08d553a4ac50 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060); SRVR:DB6PR05MB3206; X-Microsoft-Exchange-Diagnostics: 1; DB6PR05MB3206; 3:tUZYABXAr5PbKNvOG0V9TiW9z55x01FttLuJFdLsEyUvCiHjOQRFuz8uDc1n5zD4cDzg8/BHbFuqo6brtYIE8dGf/4iDtW+l7m1p/o7AxaYmXUpxZmeFibTjVLZzWmOTxm7WzCRQbpX5F2SGNR48zi58MxkFBZCrYy7FRHPkrTe9SUCgBd6vmDTZfaLGtdgXerjR+2W42BgCrxhrvhaA3LSpOGHRp6bl71oXIyBbN7dAxy3nlkYNUyNDNWUS8Ft3; 25:7/yrS2FQ+2kNg4LK2Xu+hsJu52kkvhs6gk3GdRb/AqY1pT1/0z34N+/On2UANznJAtFBn4iJc/xp009kQif4ruaVXYHWcFB2+4uUbOnht3K1HbAkG1CFc2tXyHwUtvQlmoX0AOkpZ10rSz14DoshGJWx2Kz+gVRhQKUEjF9Ug4drccpnOkfZFoHlX4v1dwUxXH2HWhNMS7LPWjXR2p3+Cw6GnRB/B7Q6ZSOzNvCOGGX+6d/q2pvWYJTeTc9HoL6HwklXkv9d/AbFAK4MatP62yS23DUqdUzh3yKkjpmwu0l4G8tXoh7NtqPFOo+SoM62MedowpBlS6M61+3r5mbuhA==; 31:VGNj3gTufmAmv//DuLyh8ZK2APPIdG0YWi+Iy4hrCI846FW9mapV2M+NG1pDI7bpYrXmdDHxmTLPf5fCAkDsq3LA9P0nzf1pS4Gt78oPkVbVVikeS6WkkPTMGRDge4SDasILiseYQ8dn9Q/DRXr9zQT3gMhszMwZHDpkLuH5vSTSewAd3KF2y2m4IlodGpk735QA4ReB7ZhvcutAHIBFUaegGB55D6GzMMNb8lxMylI= X-MS-TrafficTypeDiagnostic: DB6PR05MB3206: X-Microsoft-Exchange-Diagnostics: 1; DB6PR05MB3206; 20:MXDmmumi9rjNQ39/W0S4CR666rsLm+YRtI2Qr0UPz6kB4tyNqfd0RXy1SZ5R44UrxBVXiQU6+jxib8ap+O85be61E/2L/EnUfUSPHIfShvlqFTWZcHu6rXpNC3l4tTR78afOxohbmO/lP0qOMHGQGmaYKrt4SGZXHjUBOJpcH6bU3QH7uDWBNnlK/i67W7h3bNzN9wLT6idv9I/py132Q9dLHbuAS/RNiVrvBMdvXWwnuqGUkUvFfkjb4ZRtm/bZrdveqbQNwVRRFlOhb57iJu6SsCy1cHwxa5Uom3ieHkOa/rAE5UrbDC9/EtwM42ZFcbQ1YvKQUCU1QYVFAna1hHkcsJR5ZQhw0xYjgiU4zN25hJ6kI+ca59qkeY+97bEQQAlQ5e0DqvrK6Exwq/sI9nhL7nWS6Ud3U5xJZ2AP0UhL3hz8saSqqNH2AASlwlSYZTVRYcAMvEAvKCffZBkGU/sz3Ns1IUCOGgRoZRftnVmQEewo4s1uHCd5nvmGeUTY; 4:7uNY6O2RUMXwlfJD7l7jqNJH/TEBI0Am5M20mFwGGXbG5BND6ecTIGngGtvQVobjCKv1RUhHbNwOfY8xkmo+uhRDTsJJhti9354eD3znwSZ0zyOFsiVxA6vyJSDxqb/Eb08zMYg1TPpc0eY/v6PCWLyM14DdsILRMElYxbTmNEYFcXScC1grMFCDBi3P2G0QYgs0LFDGGFnkz3bbUDMF+HyhCpJp4gSMsKlo7fD+k1DieXPaBdQsSMCQb4RTab3ARBA5UxZAoXAB/HJypgUNhg== 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)(3231023)(944501075)(3002001)(10201501046)(93006095)(93001095)(6055026)(6041268)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123562045)(6072148)(201708071742011); SRVR:DB6PR05MB3206; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:DB6PR05MB3206; X-Forefront-PRVS: 054231DC40 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(979002)(366004)(39380400002)(39860400002)(346002)(376002)(396003)(199004)(189003)(6666003)(55016002)(52116002)(76176011)(33026002)(50226002)(7696005)(386003)(81156014)(81166006)(59450400001)(8936002)(7736002)(2906002)(8676002)(107886003)(305945005)(68736007)(4326008)(69596002)(51416003)(48376002)(25786009)(478600001)(16586007)(106356001)(105586002)(2351001)(2361001)(36756003)(50466002)(3846002)(6116002)(5660300001)(53936002)(4720700003)(66066001)(86362001)(16526018)(2950100002)(6916009)(47776003)(97736004)(21086003)(316002)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR05MB3206; 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; DB6PR05MB3206; 23:hYz9OJoalnJFndkEmHQqZ7rhXyYBoWOjDJIGmk8YG?= =?us-ascii?Q?qUiq/bw7VdYuPKK5/S0lZRu1WeLv6/CZu+Am3Pl7k/A7uP4y8SIZUXY2EBQG?= =?us-ascii?Q?BrOlZ/dZyQWc/ybENMmyexogFNY/DfFo6fG2uPbQSEQ+Cw5DAuLJ5wuTNf8s?= =?us-ascii?Q?WVvtmxnBjTvJo985Ys4ARydBLxBwWoe1IzfetQoviRLlHtLteribg7TaufjW?= =?us-ascii?Q?BKYJeoVPGc9+mqeJvK+9vtvVeSWzj7qOpXZl8vfmUWXaumHCvsvrjUwUnx1h?= =?us-ascii?Q?i4n4xKaGPyN2fSwQPSDEOXv4vNeR9UYe5P7gtEa8t2WX1PTnmhC458njG21U?= =?us-ascii?Q?Z/geoOeFMeXKNpN+9+KRIjxLrMDhrI+izdAjDltQccTK/dVlBL6gLMp8VOR8?= =?us-ascii?Q?FGKiSo1wL6puEg6dPehOmvP6Jv7JhJSj0ccqLOpJnxfyhmDusBLMXVitlUJq?= =?us-ascii?Q?ZgHvIeLUe6IMnDoSSonQ+fq9IrF9UlfKoGbmCbXjNe8eXmCQTu/lUpj6fFOl?= =?us-ascii?Q?l6Xa3qG8MXF+hexL7yHbJmqw7tXbXXc9/eXQN9IQ57yFA4iMAWaaTaKeV/Ow?= =?us-ascii?Q?JAIV1c+wgKKMGiI5Sx5Kn2Hpm8tAR93GAk5DYAcPhXO212h0LYICeWaFtr3V?= =?us-ascii?Q?dc0TSUV7srB2+NTKAM0mNYKWa7+benCHHzipZiJb7Vcrl5PKqUPvALEB9xcN?= =?us-ascii?Q?dPK9FOy9Ipjp4kV6dyHvuyFAZfftxs75gzRBx3scgRXLCB4Gws35qKH+FmDM?= =?us-ascii?Q?xe5BIHwNQ7/MI3l3+GUr03zDKcDq98Q9mpoTLlPkp+uKJkLIYvHTDEc35K8u?= =?us-ascii?Q?K3P8v1jBhfkcPcGgbpnf0NHF34T436SF70SzZhxBmZXlxdN3cI/yeTHvM1DQ?= =?us-ascii?Q?/K6JgpariNS9nfq93rAOwGeycwDgDIUTfXco+TwIsgINEB+HcW4RbJ2lt+AR?= =?us-ascii?Q?KL8KQtJtSIshG2Db9Wr+w8zg1wi3TBhM52nDaygZTAxHH6bylWb2U/HKlHV8?= =?us-ascii?Q?8qhBtBJ4XODZNXGKaoBFJp1P2Y6dAe3S66Mz9QJNACv/u9F8tS3kcdWW40zz?= =?us-ascii?Q?jKjDNA0bz53LQQqVAjg82nEteQi/8i3gZWBf6YYR6iZ0alFgHQ52MXI57Go3?= =?us-ascii?Q?yx2W0LGw0t1Vn7YUwmvdZDBq8cHn9L21HVFjT3WEy7OhWCFhk7BCLf932Pmj?= =?us-ascii?Q?YKVk0bFnc6CNZqdOlwm0KtXp/QW1UXlcqjTZs520yZ8pKvUN97hoFFk9Xkks?= =?us-ascii?Q?KElfbjr0x7kfTRSxKYaZ2rchVAZ64YRkVNtxGRD5Q6k5GLy7yFmKNojiPWd/?= =?us-ascii?Q?nOd7BRnfGu8BhXQUYemyNvfICtAxIT3nOf4kxV76Ihq?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR05MB3206; 6:fc4Dv4ZKx2gP49kb4OnoKRtAawcrAHTT+hGOzUo0Xy+qFpFSf0Ces4hA7ERl0rhsdqHM+mAKgQ93d60TjK12uTPzNyebDU8JB0OWvyUsCiA5nIQ7D64F31YMWxgQKFVtwri08LMi0UScgtq6MleNg+N866uspTdi8F5q/nwMEf3V10DNAUh8vqu798A+SSw4+1m/ENhWL3MfVSbpiehF4TdO2LQE2c5bSUij2syww/xQLQXj69Z34gf/caVVAXolINA4tdw92z2i0g8tEB6zmFW5agrDo7UzcgLucXkVKEunm9CFPvpW2a8kmEryKZZysff9Mpz7ZTnlq5tK6zh422PZcphZYK2cTiAtDGaI4LY=; 5:qGkdLQBonBlVFumznn/fhUdHSwZUewUgo1K+lWbHInWO7yMNlTBnTRK8+7hUSg9/TOyfQ2AUfmuT3IW+KHvHoOA3Cmi2PQv+cjbRHXEsNi9vGojd52B8AluSgwpg2NlC6LqYmZe7SX6RqRX6Haks8yEHyLbgyLlny04zGzbnioc=; 24:EKwoiE7HGLZ1JxhHGiaoW74s2xVm1l793n4QOieIw7ObHT/L6+8ScdRj36bYk6kO0ixM7BvKzMB8NbbLlz80H1xOA4xp3HxY+Ggy484f8H0=; 7:xmO5oneufze3KC+cASsaU8pcuFUX2Flk6qU5DGkZ50Cay5FuzEMG8LuXgK9A3SiqPScpECZCACCz5lXQKX6ahbS/EPji5gwhOc2Ux583j3fBOj3ZuKk40CWcHFLoiW7xtaLyqO7ZIsQ+ogjFFfJ+/huufuF/QBXaLtcE1UrfnccnoTICHASnnvdgeHl02TNKf/aKNZaO65MPaiS2Fr9xJ0VGjy/SyKZtttIKxJc7vBZAZkPFKVduENk9s/XaLCgi SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jan 2018 18:55:06.8652 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 10771899-6310-423b-926a-08d553a4ac50 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR05MB3206 Subject: [dpdk-dev] [PATCH V2 1/2] net/tap: 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: , X-List-Received-Date: Thu, 04 Jan 2018 18:55:08 -0000 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: Moti Haimovsky --- drivers/net/tap/rte_eth_tap.c | 96 +++++++++++++++++++++++++++++++++++++------ drivers/net/tap/rte_eth_tap.h | 1 + 2 files changed, 85 insertions(+), 12 deletions(-) diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index 6b27679..5925709 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -53,6 +53,7 @@ #include #include #include +#include #include #include #include @@ -379,6 +380,42 @@ enum ioctl_mode { return num_rx; } +static uint64_t +tap_tx_offload_get_port_capa(void) +{ + /* + * In order to support legacy apps, + * report capabilities also as port capabilities. + */ + return DEV_TX_OFFLOAD_IPV4_CKSUM | + DEV_TX_OFFLOAD_UDP_CKSUM | + DEV_TX_OFFLOAD_TCP_CKSUM; +} + +static uint64_t +tap_tx_offload_get_queue_capa(void) +{ + return DEV_TX_OFFLOAD_IPV4_CKSUM | + DEV_TX_OFFLOAD_UDP_CKSUM | + DEV_TX_OFFLOAD_TCP_CKSUM; +} + +static bool +tap_txq_are_offloads_valid(struct rte_eth_dev *dev, uint64_t offloads) +{ + uint64_t port_offloads = dev->data->dev_conf.txmode.offloads; + uint64_t queue_supp_offloads = tap_tx_offload_get_queue_capa(); + uint64_t port_supp_offloads = tap_tx_offload_get_port_capa(); + + if ((offloads & (queue_supp_offloads | port_supp_offloads)) != + offloads) + return false; + /* Verify we have no conflict with port offloads */ + if ((port_offloads ^ offloads) & port_supp_offloads) + return false; + return true; +} + static void tap_tx_offload(char *packet, uint64_t ol_flags, unsigned int l2_len, unsigned int l3_len) @@ -465,9 +502,10 @@ enum ioctl_mode { rte_pktmbuf_mtod(seg, void *); seg = seg->next; } - if (mbuf->ol_flags & (PKT_TX_IP_CKSUM | PKT_TX_IPV4) || - (mbuf->ol_flags & PKT_TX_L4_MASK) == PKT_TX_UDP_CKSUM || - (mbuf->ol_flags & PKT_TX_L4_MASK) == PKT_TX_TCP_CKSUM) { + if (txq->csum && + ((mbuf->ol_flags & (PKT_TX_IP_CKSUM | PKT_TX_IPV4) || + (mbuf->ol_flags & PKT_TX_L4_MASK) == PKT_TX_UDP_CKSUM || + (mbuf->ol_flags & PKT_TX_L4_MASK) == PKT_TX_TCP_CKSUM))) { /* Support only packets with all data in the same seg */ if (mbuf->nb_segs > 1) break; @@ -605,6 +643,17 @@ enum ioctl_mode { static int tap_dev_configure(struct rte_eth_dev *dev) { + uint64_t supp_tx_offloads = tap_tx_offload_get_port_capa(); + uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads; + + if ((tx_offloads & supp_tx_offloads) != tx_offloads) { + rte_errno = ENOTSUP; + RTE_LOG(ERR, PMD, + "Some Tx offloads are not supported " + "requested 0x%lx supported 0x%lx\n", + tx_offloads, supp_tx_offloads); + return -rte_errno; + } if (dev->data->nb_rx_queues > RTE_PMD_TAP_MAX_QUEUES) { RTE_LOG(ERR, PMD, "%s: number of rx queues %d exceeds max num of queues %d\n", @@ -681,10 +730,9 @@ enum ioctl_mode { dev_info->rx_offload_capa = (DEV_RX_OFFLOAD_IPV4_CKSUM | DEV_RX_OFFLOAD_UDP_CKSUM | DEV_RX_OFFLOAD_TCP_CKSUM); - dev_info->tx_offload_capa = - (DEV_TX_OFFLOAD_IPV4_CKSUM | - DEV_TX_OFFLOAD_UDP_CKSUM | - DEV_TX_OFFLOAD_TCP_CKSUM); + dev_info->tx_queue_offload_capa = tap_tx_offload_get_queue_capa(); + dev_info->tx_offload_capa = dev_info->tx_queue_offload_capa | + tap_tx_offload_get_port_capa(); } static int @@ -1058,21 +1106,45 @@ enum ioctl_mode { uint16_t tx_queue_id, uint16_t nb_tx_desc __rte_unused, unsigned int socket_id __rte_unused, - const struct rte_eth_txconf *tx_conf __rte_unused) + const struct rte_eth_txconf *tx_conf) { struct pmd_internals *internals = dev->data->dev_private; + struct tx_queue *txq; int ret; if (tx_queue_id >= dev->data->nb_tx_queues) return -1; - dev->data->tx_queues[tx_queue_id] = &internals->txq[tx_queue_id]; + txq = dev->data->tx_queues[tx_queue_id]; + /* + * Don't verify port offloads for application which + * use the old API. + */ + if ((tx_conf != NULL) && + !!(tx_conf->txq_flags & ETH_TXQ_FLAGS_IGNORE)) { + if (tap_txq_are_offloads_valid(dev, tx_conf->offloads)) { + txq->csum = !!(tx_conf->offloads & + (DEV_TX_OFFLOAD_IPV4_CKSUM | + DEV_TX_OFFLOAD_UDP_CKSUM | + DEV_TX_OFFLOAD_TCP_CKSUM)); + } else { + rte_errno = ENOTSUP; + RTE_LOG(ERR, PMD, + "%p: Tx queue offloads 0x%lx don't match port " + "offloads 0x%lx or supported offloads 0x%lx", + (void *)dev, tx_conf->offloads, + dev->data->dev_conf.txmode.offloads, + tap_tx_offload_get_port_capa()); + return -rte_errno; + } + } ret = tap_setup_queue(dev, internals, tx_queue_id, 0); if (ret == -1) return -1; - - RTE_LOG(DEBUG, PMD, " TX TAP device name %s, qid %d on fd %d\n", - internals->name, tx_queue_id, internals->txq[tx_queue_id].fd); + RTE_LOG(DEBUG, PMD, + " TX TAP device name %s, qid %d on fd %d csum %s\n", + internals->name, tx_queue_id, internals->txq[tx_queue_id].fd, + txq->csum ? "on" : "off"); return 0; } diff --git a/drivers/net/tap/rte_eth_tap.h b/drivers/net/tap/rte_eth_tap.h index 829f32f..69a1a08 100644 --- a/drivers/net/tap/rte_eth_tap.h +++ b/drivers/net/tap/rte_eth_tap.h @@ -76,6 +76,7 @@ struct rx_queue { struct tx_queue { int fd; uint16_t *mtu; /* Pointer to MTU from dev_data */ + uint16_t csum:1; /* Enable checksum offloading */ struct pkt_stats stats; /* Stats for this TX queue */ }; -- 1.8.3.1