From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0054.outbound.protection.outlook.com [104.47.1.54]) by dpdk.org (Postfix) with ESMTP id 897931B011 for ; Tue, 19 Dec 2017 18:10:47 +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=u2zRxNrsXqYkKTvPt5AGZsGBV/aIkQPIF0binm2oENQ=; b=GP1x8NB+13nuvv8RRkoR1QaXqYPIPlpFXmywtRuoa8nWDb9Rm3iY2xE9djBFhJQN47N3CIpQgvCWVGZmQ/osX5/1YHuo/bnJyHT54TuwZPZxTjE9sfFuvVYnu+z+pqpoRlIodkOJMiOcs1B1O3VSxN08hCrpEiyrP8O12gOYeC8= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=matan@mellanox.com; Received: from mellanox.com (37.142.13.130) by AM6PR0502MB3655.eurprd05.prod.outlook.com (2603:10a6:209:9::16) 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:10:44 +0000 From: Matan Azrad To: Adrien Mazarguil , Thomas Monjalon , Gaetan Rivet Cc: dev@dpdk.org Date: Tue, 19 Dec 2017 17:10:13 +0000 Message-Id: <1513703415-29145-5-git-send-email-matan@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513703415-29145-1-git-send-email-matan@mellanox.com> References: <1513175370-16583-1-git-send-email-matan@mellanox.com> <1513703415-29145-1-git-send-email-matan@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: DB3PR0202CA0017.eurprd02.prod.outlook.com (2603:10a6:8:1::30) To AM6PR0502MB3655.eurprd05.prod.outlook.com (2603:10a6:209:9::16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 280c9458-0a50-4def-d9d8-08d547037193 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:AM6PR0502MB3655; X-Microsoft-Exchange-Diagnostics: 1; AM6PR0502MB3655; 3:XMl8df/oakh1eXazYuC3ZPOn2gdFuGcHdcpUDJ83xXiV4UQdiwGUXepaRz4VMt9VKh5G4whHmX8BxQrY8VMuQ/hmwtdOE2sjVGe1ennDnByjsYMjiQzLpfPH8puPJHQDoemxZCxdI66r3KHH73RBnOLDtgHIZ/xaZN7w2eSPmqb96d2cRgTygPUP4FzF4Ypm2hjiYz4Ggey+NwjOhsBhyOu//W0oF0rV9yY1z+McXwDRz82f1juVXg1lYrHYDOXE; 25:nLYuO1dPDopq7EQs5mjwF1EoL/kLnN6FISnTx2B4anpd+upvfLUFFiMeszNgC3U+W9idn/mG46e5raEd4aGkLpu+iUIkiMT9nGfxNnvA6IrZwV4XSHb5rNbQi1NcSkgcwvy4KNPymsfMb5gniHfCKFBn2b3hn/GuNuaU2YcP5P7U1ndn+WsE2/pxkbRj4ibWKKNP1vJvIqAwILO/LLnAh4ThmpNQn9Uow6Bj4nwDutO1fs02Ys2VVk4VHteE0ZqWQCzEalR/0V6dR796KxiB+iYwrUyXHjSlFCeBBFSfeb/6SSrwjc75YmM5RK18WXU0iHkLB/l1vtLudt5FcO2Nsw==; 31:Ag47xSCoxCKjJZZ9ni8UTQ/FoeYfAtpcfWgiq3xguIPTewurFWrIaUl+T3QQyNnxF3Tdv7AaT+gdoE+TJwPjEw0Yp5LxykImmRbSv5YXk5Fxyu8YYm6x85HFECe19Fo9NcnRAgKz7Bxf87HO63sqR+rjEPQOQMGvsPVWkqIK56zHIgEbSbZqSBiJzagKqfPLIo0YWTPxB9+kJ3GefkDoUC/dR5M7RHNIUFBZFB1PRsY= X-MS-TrafficTypeDiagnostic: AM6PR0502MB3655: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM6PR0502MB3655; 20:k1rbHBCRz/R26ITd5AlUMewuAtPHG9CbYEj9W7ofNkGoxBTfDz9D9Gpse+RmMmUmsTbZO9dzqV06yIgc9T/IniZACR13F675v/rrnABTVN9/G0UaVnZhwG/VGKbFXKdZ5EDcqEfw8K/fOBv7Kgt0Wn6JzDhqSp9yt4MBilPJIoLPxxB6usgs3SdhQGjlMQPuRSP3O/Z2b0pmzaxW09ab5edCn1QIKbtKJcZIDiA6AlUzZIvQHFARjkhOvkNZglV5WEn72xhUOKB1GuBmZ90WHegorUBLVscEn/m4HqU9PWqt+Tugei2fjrIzWlKMBMhg0XpURk9/n6wTe4NNEAlYxEAzT+wwCzqtoqw/dx7uyZNa9VufX/52ZOaWEFtwqDjB/z4KDhgH+2vaJjQoytlMau10oeB7iwu5LwucB0hUgKh19OQRxMZjCxbOnyLMqaVTZI2u2+hwNMRsvyKKyX0UqVJHQhLkoFAYD2UFzspPm4Xn7Cnz8aXAvhe+VHF8K/RP; 4:ObABbt+Xm/YbAaDwkaa5I5if6pOBBYJaYhnbtR7d3ATuqIU6EWEaxmpxedadKvkAuTtsUhRzN+wGpZgZTmCa4orR+iYkKe7pO4/l3Kr3bTThNSbkRRfvXJAa6XfZawL4fmhVOI6Dqsae9IAR6RV9ueKaYn+hlBfJbSz5cwLR0lSejUOH3mwEDzhF3VhD7h4oEcCwbynisjxOhVUerI8BdIvsogIGBOp1Ae5Qk5J0QYXQAvhZhAr9y+dAiIX7Aa0xuHbu2IXkuDZMAYoO41B9pUOqxtusri4XijA5I91U4vB18ikcOCtdvxP0whT7a/MT X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(20558992708506); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3002001)(3231023)(6055026)(6041248)(20161123558100)(20161123560025)(20161123562025)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:AM6PR0502MB3655; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM6PR0502MB3655; X-Forefront-PRVS: 052670E5A4 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(346002)(39860400002)(376002)(366004)(189003)(199004)(52116002)(47776003)(81166006)(69596002)(66066001)(7696005)(305945005)(2906002)(5660300001)(7736002)(55016002)(478600001)(51416003)(59450400001)(4720700003)(33026002)(6666003)(386003)(2950100002)(16586007)(16526018)(110136005)(316002)(48376002)(8936002)(106356001)(105586002)(50226002)(50466002)(5890100001)(76176011)(36756003)(68736007)(21086003)(8676002)(81156014)(53936002)(3846002)(575784001)(53946003)(25786009)(97736004)(86362001)(4326008)(6116002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR0502MB3655; 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; AM6PR0502MB3655; 23:wV2co0qJF59NVfV0iPjtYWaAzd05qjQm63ybnMA?= =?us-ascii?Q?gJbT3x2+FmcAxb5sKLIbS3EiAaGYjSXao7mI8iu+s1KzumIc+QogXBxXlVu1?= =?us-ascii?Q?+ahJEebvOywILPqJ1JLztkdBK7yFhH4n6afuNfFbLMOUEvMuku6Jp1FMMjeC?= =?us-ascii?Q?tGEQuafUaSqlLLsnL1SPOZ5SWEXDjOJ+z640FfyQ2a6jgrml/RUm3h8pyylY?= =?us-ascii?Q?gO8Bync0SwJsSgwmFprpT6eBwLzW46+5vlK2yg056j/45cskvyOLJDL5mZBQ?= =?us-ascii?Q?8v4M4dEngmNMXFuXMDsqgNSnfEKieSiDOJfjA/BiLwCwCpgbX7hRDneqZeo+?= =?us-ascii?Q?Se2z4ODR+nxHEL72daydnZEtKtmoTxRxc8xN0LCMEP1bMO2/ifIpq2FHQ3qi?= =?us-ascii?Q?W/INauya/5JNLY4wrrsImG7uoTihAGfDuZmIFlQZB/9vtZdBWTpf72BWbUSJ?= =?us-ascii?Q?9WMlDyl+4iIWbe4t7XSd+OlS6dERoHm1OyLu52I5vx67xuJxh2wUEErnF49c?= =?us-ascii?Q?Xd0dsAN/0/SCS+WWVMQC+C3y/6RMZe9bAgody8cbF/5A9BWcuPnnZBag+Se5?= =?us-ascii?Q?Dl364jUCv/WVrU0mXoRCuWSePPRYkGoniuGRhn9GEmleUS0QPa6wEMUT5eik?= =?us-ascii?Q?ew/3QSbFmJhP52SNlWTLShoORqHFpM8Ks7xKGqHRC3ZTB+HOUACsq/Ifzw7/?= =?us-ascii?Q?/QhGiCtnfAf7zvy2899AfjBUQ/mtcgSdRaBWrfPZIJqp40O3+UF12+O3TRFS?= =?us-ascii?Q?o05dPxqKZr8G1Bdfpy2aJExj43GJgSCSEAubxfQiUxFXYvgt7/kzlNhZPdaO?= =?us-ascii?Q?oZYjDDhteYEr+zy79GcOHYZiDlnNAnXijHVZPk8vvaGC5Mb43xM4xZkApnrz?= =?us-ascii?Q?54M0XVM6I4DVhuCHUheb4nDlBBhDap/Dc8fvg4KkI28siC2VFajHkeCApnpn?= =?us-ascii?Q?CVzxrqFO3DL/annEivXqWVaHBsxfVD9rWXqc1147AABlPedAOp+7vpBr1jUE?= =?us-ascii?Q?aGnJpc6aMcWjOZr1D4pG7/V4vX/dbei7KQrXJG5w1qoFX39kgczXbLuGvCAP?= =?us-ascii?Q?tJtq0qDvvR9aLT23g+qg9sroIqDMpYesx6XVgR9o9U/06JH9LP5gkk7kNmqt?= =?us-ascii?Q?i3P3+gpH7NEeB4ZJomYV/oUKmjOns52PbqXH5JqsTwcRXTXNVD21vzkfCAjJ?= =?us-ascii?Q?ttYv4amKm7SR0oMQzsMkKYINdFq8f4Er5tGoQ5GZy2Q/Z1D5bPsOa0H5JWQ?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM6PR0502MB3655; 6:/wC+kP2xcjw6lzWnLOWvujHAfb4WRdXrNO3ZIuSQdrQ0A/6qU1FG78i6z+THeir09R5zWhaTAZmk+U1NB4rHcmjbUIUgTeLJ+9ukKDqHFxjjpD9d3uLW+viw0ldTwnOBw9E6WR01bwM8KnjjFzzA5wh7hdIlWW/ZttQ6GP+SWhRTAJGaZZPGiF0/4DAeoK/do8O7d2hvf3BH5s30YwjXHaKMh7Y5cXeAZF+GwwgUjMoclF86X6Lemp6ApHozhp7xVwDgT8JUxl1XNZw4zDqXCuoiPstk8CFgP1vk/eiACWtCg6gPpTdaVjC9/C2TlGeXMTyiPuUI7/OhJvnLmLv5LE4sCPmwTJiT4nx3RLzH7LY=; 5:dV5oB8e8or6LFoE0+kOzEg5u7shqhOw/9wgVomz3yhpHo4YrYHH0BcJJgnVTo9sdn0rzzZMwUMrAL1EzuOfe1nVppuB3elmGHzIkHqHfVDIGwqDWG4KD3+G21FEalEqOvFtoLz46YMZwM8+cslHflDzdOUaNIoO6SWT+LFrfvMI=; 24:6dBRQcj2/aULro2GxfoqLrv/8J7YJfyrclX9coBARJG5stS7+LoJn50E6K44nL9kFjdY1psrbp/7LvASCKZik+7+HSE4Fb7zLa+/8isDbhs=; 7:BrRqOHJiDWJkUs7NzZbcYdABSGo8KK7kCyPfRnrEBlzxY6UH7tYu8sRCKPshmf5AKYMn270+LPaE29kzJ4y8fFnXultnKFgHmR/Y8D8M7d3bHiM13oQ3C2rxVfz4AjH8JnJtu/8uA531qanZV1YFtq8BOYYsx/m4ohwkk8LIjKl6D0Qum73oTmxWRC0787psk1IVuLRbqIoRn6TbtS301k98QLeYJbmldM2HZ/iFtnoBm1fOzVx56yHeUzRPN4lk SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Dec 2017 17:10:44.9407 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 280c9458-0a50-4def-d9d8-08d547037193 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR0502MB3655 Subject: [dpdk-dev] [PATCH v3 4/6] ethdev: adjust APIs removal error report 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:10:48 -0000 rte_eth_dev_is_removed API was added to detect a device removal synchronously. When a device removal occurs during control command execution, many different errors can be reported to the user. Adjust all ethdev APIs error reports to return -EIO in case of device removal using rte_eth_dev_is_removed API. Signed-off-by: Matan Azrad --- lib/librte_ether/rte_ethdev.c | 187 ++++++++++++++++++++++++++---------------- lib/librte_ether/rte_ethdev.h | 51 +++++++++++- 2 files changed, 165 insertions(+), 73 deletions(-) diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index c759d0e..301d108 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -362,6 +362,16 @@ struct rte_eth_dev * return -ENODEV; } +static int +eth_err(uint16_t port_id, int ret) +{ + if (ret == 0) + return 0; + if (rte_eth_dev_is_removed(port_id)) + return -EIO; + return ret; +} + /* attach the new device, then store port_id of the device */ int rte_eth_dev_attach(const char *devargs, uint16_t *port_id) @@ -516,7 +526,8 @@ struct rte_eth_dev * return 0; } - return dev->dev_ops->rx_queue_start(dev, rx_queue_id); + return eth_err(port_id, dev->dev_ops->rx_queue_start(dev, + rx_queue_id)); } @@ -542,7 +553,7 @@ struct rte_eth_dev * return 0; } - return dev->dev_ops->rx_queue_stop(dev, rx_queue_id); + return eth_err(port_id, dev->dev_ops->rx_queue_stop(dev, rx_queue_id)); } @@ -568,7 +579,8 @@ struct rte_eth_dev * return 0; } - return dev->dev_ops->tx_queue_start(dev, tx_queue_id); + return eth_err(port_id, dev->dev_ops->tx_queue_start(dev, + tx_queue_id)); } @@ -594,7 +606,7 @@ struct rte_eth_dev * return 0; } - return dev->dev_ops->tx_queue_stop(dev, tx_queue_id); + return eth_err(port_id, dev->dev_ops->tx_queue_stop(dev, tx_queue_id)); } @@ -912,7 +924,7 @@ struct rte_eth_dev * port_id, diag); rte_eth_dev_rx_queue_config(dev, 0); rte_eth_dev_tx_queue_config(dev, 0); - return diag; + return eth_err(port_id, diag); } /* Initialize Rx profiling if enabled at compilation time. */ @@ -922,7 +934,7 @@ struct rte_eth_dev * port_id, diag); rte_eth_dev_rx_queue_config(dev, 0); rte_eth_dev_tx_queue_config(dev, 0); - return diag; + return eth_err(port_id, diag); } return 0; @@ -1022,7 +1034,7 @@ struct rte_eth_dev * if (diag == 0) dev->data->dev_started = 1; else - return diag; + return eth_err(port_id, diag); rte_eth_dev_config_restore(port_id); @@ -1064,7 +1076,7 @@ struct rte_eth_dev * dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_set_link_up, -ENOTSUP); - return (*dev->dev_ops->dev_set_link_up)(dev); + return eth_err(port_id, (*dev->dev_ops->dev_set_link_up)(dev)); } int @@ -1077,7 +1089,7 @@ struct rte_eth_dev * dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_set_link_down, -ENOTSUP); - return (*dev->dev_ops->dev_set_link_down)(dev); + return eth_err(port_id, (*dev->dev_ops->dev_set_link_down)(dev)); } void @@ -1114,7 +1126,7 @@ struct rte_eth_dev * rte_eth_dev_stop(port_id); ret = dev->dev_ops->dev_reset(dev); - return ret; + return eth_err(port_id, ret); } int @@ -1238,7 +1250,7 @@ struct rte_eth_dev * dev->data->min_rx_buf_size = mbp_buf_size; } - return ret; + return eth_err(port_id, ret); } /** @@ -1357,8 +1369,8 @@ struct rte_eth_dev * &local_conf.offloads); } - return (*dev->dev_ops->tx_queue_setup)(dev, tx_queue_id, nb_tx_desc, - socket_id, &local_conf); + return eth_err(port_id, (*dev->dev_ops->tx_queue_setup)(dev, + tx_queue_id, nb_tx_desc, socket_id, &local_conf)); } void @@ -1414,14 +1426,16 @@ struct rte_eth_dev * rte_eth_tx_done_cleanup(uint16_t port_id, uint16_t queue_id, uint32_t free_cnt) { struct rte_eth_dev *dev = &rte_eth_devices[port_id]; + int ret; /* Validate Input Data. Bail if not valid or not supported. */ RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_done_cleanup, -ENOTSUP); /* Call driver to free pending mbufs. */ - return (*dev->dev_ops->tx_done_cleanup)(dev->data->tx_queues[queue_id], - free_cnt); + ret = (*dev->dev_ops->tx_done_cleanup)(dev->data->tx_queues[queue_id], + free_cnt); + return eth_err(port_id, ret); } void @@ -1558,7 +1572,7 @@ struct rte_eth_dev * RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stats_get, -ENOTSUP); stats->rx_nombuf = dev->data->rx_mbuf_alloc_failed; - return (*dev->dev_ops->stats_get)(dev, stats); + return eth_err(port_id, (*dev->dev_ops->stats_get)(dev, stats)); } int @@ -1604,12 +1618,12 @@ struct rte_eth_dev * count = (*dev->dev_ops->xstats_get_names_by_id)(dev, NULL, NULL, 0); if (count < 0) - return count; + return eth_err(port_id, count); } if (dev->dev_ops->xstats_get_names != NULL) { count = (*dev->dev_ops->xstats_get_names)(dev, NULL, 0); if (count < 0) - return count; + return eth_err(port_id, count); } else count = 0; @@ -1736,8 +1750,12 @@ struct rte_eth_dev * } /* Fill xstats_names_copy structure */ - rte_eth_xstats_get_names(port_id, xstats_names_copy, expected_entries); - + ret = rte_eth_xstats_get_names(port_id, xstats_names_copy, + expected_entries); + if (ret < 0) { + free(xstats_names_copy); + return ret; + } /* Filter stats */ for (i = 0; i < size; i++) { if (ids[i] >= expected_entries) { @@ -1810,7 +1828,7 @@ struct rte_eth_dev * xstats_names + cnt_used_entries, size - cnt_used_entries); if (cnt_driver_entries < 0) - return cnt_driver_entries; + return eth_err(port_id, cnt_driver_entries); cnt_used_entries += cnt_driver_entries; } @@ -1830,7 +1848,10 @@ struct rte_eth_dev * int ret; RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); - expected_entries = get_xstats_count(port_id); + ret = get_xstats_count(port_id); + if (ret < 0) + return ret; + expected_entries = (uint16_t)ret; struct rte_eth_xstat xstats[expected_entries]; dev = &rte_eth_devices[port_id]; @@ -1901,6 +1922,7 @@ struct rte_eth_dev * signed int xcount = 0; uint64_t val, *stats_ptr; uint16_t nb_rxqs, nb_txqs; + int ret; RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL); @@ -1923,7 +1945,7 @@ struct rte_eth_dev * (n > count) ? n - count : 0); if (xcount < 0) - return xcount; + return eth_err(port_id, xcount); } if (n < count + xcount || xstats == NULL) @@ -1931,7 +1953,9 @@ struct rte_eth_dev * /* now fill the xstats structure */ count = 0; - rte_eth_stats_get(port_id, ð_stats); + ret = rte_eth_stats_get(port_id, ð_stats); + if (ret < 0) + return ret; /* global stats */ for (i = 0; i < RTE_NB_STATS; i++) { @@ -2011,8 +2035,8 @@ struct rte_eth_dev * rte_eth_dev_set_tx_queue_stats_mapping(uint16_t port_id, uint16_t tx_queue_id, uint8_t stat_idx) { - return set_queue_stats_mapping(port_id, tx_queue_id, stat_idx, - STAT_QMAP_TX); + return eth_err(port_id, set_queue_stats_mapping(port_id, tx_queue_id, + stat_idx, STAT_QMAP_TX)); } @@ -2020,8 +2044,8 @@ struct rte_eth_dev * rte_eth_dev_set_rx_queue_stats_mapping(uint16_t port_id, uint16_t rx_queue_id, uint8_t stat_idx) { - return set_queue_stats_mapping(port_id, rx_queue_id, stat_idx, - STAT_QMAP_RX); + return eth_err(port_id, set_queue_stats_mapping(port_id, rx_queue_id, + stat_idx, STAT_QMAP_RX)); } int @@ -2033,7 +2057,8 @@ struct rte_eth_dev * dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->fw_version_get, -ENOTSUP); - return (*dev->dev_ops->fw_version_get)(dev, fw_version, fw_size); + return eth_err(port_id, (*dev->dev_ops->fw_version_get)(dev, + fw_version, fw_size)); } void @@ -2123,7 +2148,7 @@ struct rte_eth_dev * if (!ret) dev->data->mtu = mtu; - return ret; + return eth_err(port_id, ret); } int @@ -2163,7 +2188,7 @@ struct rte_eth_dev * vfc->ids[vidx] &= ~(UINT64_C(1) << vbit); } - return ret; + return eth_err(port_id, ret); } int @@ -2196,7 +2221,8 @@ struct rte_eth_dev * dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vlan_tpid_set, -ENOTSUP); - return (*dev->dev_ops->vlan_tpid_set)(dev, vlan_type, tpid); + return eth_err(port_id, (*dev->dev_ops->vlan_tpid_set)(dev, vlan_type, + tpid)); } int @@ -2274,7 +2300,7 @@ struct rte_eth_dev * &dev->data->dev_conf.rxmode); } - return ret; + return eth_err(port_id, ret); } int @@ -2309,9 +2335,8 @@ struct rte_eth_dev * RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vlan_pvid_set, -ENOTSUP); - (*dev->dev_ops->vlan_pvid_set)(dev, pvid, on); - return 0; + return eth_err(port_id, (*dev->dev_ops->vlan_pvid_set)(dev, pvid, on)); } int @@ -2323,7 +2348,7 @@ struct rte_eth_dev * dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->flow_ctrl_get, -ENOTSUP); memset(fc_conf, 0, sizeof(*fc_conf)); - return (*dev->dev_ops->flow_ctrl_get)(dev, fc_conf); + return eth_err(port_id, (*dev->dev_ops->flow_ctrl_get)(dev, fc_conf)); } int @@ -2339,7 +2364,7 @@ struct rte_eth_dev * dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->flow_ctrl_set, -ENOTSUP); - return (*dev->dev_ops->flow_ctrl_set)(dev, fc_conf); + return eth_err(port_id, (*dev->dev_ops->flow_ctrl_set)(dev, fc_conf)); } int @@ -2357,7 +2382,8 @@ struct rte_eth_dev * dev = &rte_eth_devices[port_id]; /* High water, low water validation are device specific */ if (*dev->dev_ops->priority_flow_ctrl_set) - return (*dev->dev_ops->priority_flow_ctrl_set)(dev, pfc_conf); + return eth_err(port_id, (*dev->dev_ops->priority_flow_ctrl_set) + (dev, pfc_conf)); return -ENOTSUP; } @@ -2432,7 +2458,8 @@ struct rte_eth_dev * return ret; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->reta_update, -ENOTSUP); - return (*dev->dev_ops->reta_update)(dev, reta_conf, reta_size); + return eth_err(port_id, (*dev->dev_ops->reta_update)(dev, reta_conf, + reta_size)); } int @@ -2452,7 +2479,8 @@ struct rte_eth_dev * dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->reta_query, -ENOTSUP); - return (*dev->dev_ops->reta_query)(dev, reta_conf, reta_size); + return eth_err(port_id, (*dev->dev_ops->reta_query)(dev, reta_conf, + reta_size)); } int @@ -2464,7 +2492,8 @@ struct rte_eth_dev * RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rss_hash_update, -ENOTSUP); - return (*dev->dev_ops->rss_hash_update)(dev, rss_conf); + return eth_err(port_id, (*dev->dev_ops->rss_hash_update)(dev, + rss_conf)); } int @@ -2476,7 +2505,8 @@ struct rte_eth_dev * RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rss_hash_conf_get, -ENOTSUP); - return (*dev->dev_ops->rss_hash_conf_get)(dev, rss_conf); + return eth_err(port_id, (*dev->dev_ops->rss_hash_conf_get)(dev, + rss_conf)); } int @@ -2498,7 +2528,8 @@ struct rte_eth_dev * dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->udp_tunnel_port_add, -ENOTSUP); - return (*dev->dev_ops->udp_tunnel_port_add)(dev, udp_tunnel); + return eth_err(port_id, (*dev->dev_ops->udp_tunnel_port_add)(dev, + udp_tunnel)); } int @@ -2521,7 +2552,8 @@ struct rte_eth_dev * } RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->udp_tunnel_port_del, -ENOTSUP); - return (*dev->dev_ops->udp_tunnel_port_del)(dev, udp_tunnel); + return eth_err(port_id, (*dev->dev_ops->udp_tunnel_port_del)(dev, + udp_tunnel)); } int @@ -2532,7 +2564,7 @@ struct rte_eth_dev * RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_led_on, -ENOTSUP); - return (*dev->dev_ops->dev_led_on)(dev); + return eth_err(port_id, (*dev->dev_ops->dev_led_on)(dev)); } int @@ -2543,7 +2575,7 @@ struct rte_eth_dev * RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_led_off, -ENOTSUP); - return (*dev->dev_ops->dev_led_off)(dev); + return eth_err(port_id, (*dev->dev_ops->dev_led_off)(dev)); } /* @@ -2619,7 +2651,7 @@ struct rte_eth_dev * dev->data->mac_pool_sel[index] |= (1ULL << pool); } - return ret; + return eth_err(port_id, ret); } int @@ -2745,7 +2777,7 @@ struct rte_eth_dev * &dev->data->hash_mac_addrs[index]); } - return ret; + return eth_err(port_id, ret); } int @@ -2758,7 +2790,8 @@ struct rte_eth_dev * dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->uc_all_hash_table_set, -ENOTSUP); - return (*dev->dev_ops->uc_all_hash_table_set)(dev, on); + return eth_err(port_id, (*dev->dev_ops->uc_all_hash_table_set)(dev, + on)); } int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, @@ -2788,7 +2821,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, } RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->set_queue_rate_limit, -ENOTSUP); - return (*dev->dev_ops->set_queue_rate_limit)(dev, queue_idx, tx_rate); + return eth_err(port_id, (*dev->dev_ops->set_queue_rate_limit)(dev, + queue_idx, tx_rate)); } int @@ -2826,7 +2860,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mirror_rule_set, -ENOTSUP); - return (*dev->dev_ops->mirror_rule_set)(dev, mirror_conf, rule_id, on); + return eth_err(port_id, (*dev->dev_ops->mirror_rule_set)(dev, + mirror_conf, rule_id, on)); } int @@ -2839,7 +2874,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mirror_rule_reset, -ENOTSUP); - return (*dev->dev_ops->mirror_rule_reset)(dev, rule_id); + return eth_err(port_id, (*dev->dev_ops->mirror_rule_reset)(dev, + rule_id)); } int @@ -3061,7 +3097,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_intr_enable, -ENOTSUP); - return (*dev->dev_ops->rx_queue_intr_enable)(dev, queue_id); + return eth_err(port_id, (*dev->dev_ops->rx_queue_intr_enable)(dev, + queue_id)); } int @@ -3075,7 +3112,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_intr_disable, -ENOTSUP); - return (*dev->dev_ops->rx_queue_intr_disable)(dev, queue_id); + return eth_err(port_id, (*dev->dev_ops->rx_queue_intr_disable)(dev, + queue_id)); } @@ -3103,7 +3141,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->filter_ctrl, -ENOTSUP); - return (*dev->dev_ops->filter_ctrl)(dev, filter_type, filter_op, arg); + return eth_err(port_id, (*dev->dev_ops->filter_ctrl)(dev, filter_type, + filter_op, arg)); } void * @@ -3353,7 +3392,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->set_mc_addr_list, -ENOTSUP); - return dev->dev_ops->set_mc_addr_list(dev, mc_addr_set, nb_mc_addr); + return eth_err(port_id, dev->dev_ops->set_mc_addr_list(dev, + mc_addr_set, nb_mc_addr)); } int @@ -3365,7 +3405,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_enable, -ENOTSUP); - return (*dev->dev_ops->timesync_enable)(dev); + return eth_err(port_id, (*dev->dev_ops->timesync_enable)(dev)); } int @@ -3377,7 +3417,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_disable, -ENOTSUP); - return (*dev->dev_ops->timesync_disable)(dev); + return eth_err(port_id, (*dev->dev_ops->timesync_disable)(dev)); } int @@ -3390,7 +3430,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_read_rx_timestamp, -ENOTSUP); - return (*dev->dev_ops->timesync_read_rx_timestamp)(dev, timestamp, flags); + return eth_err(port_id, (*dev->dev_ops->timesync_read_rx_timestamp) + (dev, timestamp, flags)); } int @@ -3403,7 +3444,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_read_tx_timestamp, -ENOTSUP); - return (*dev->dev_ops->timesync_read_tx_timestamp)(dev, timestamp); + return eth_err(port_id, (*dev->dev_ops->timesync_read_tx_timestamp) + (dev, timestamp)); } int @@ -3415,7 +3457,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_adjust_time, -ENOTSUP); - return (*dev->dev_ops->timesync_adjust_time)(dev, delta); + return eth_err(port_id, (*dev->dev_ops->timesync_adjust_time)(dev, + delta)); } int @@ -3427,7 +3470,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_read_time, -ENOTSUP); - return (*dev->dev_ops->timesync_read_time)(dev, timestamp); + return eth_err(port_id, (*dev->dev_ops->timesync_read_time)(dev, + timestamp)); } int @@ -3439,7 +3483,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_write_time, -ENOTSUP); - return (*dev->dev_ops->timesync_write_time)(dev, timestamp); + return eth_err(port_id, (*dev->dev_ops->timesync_write_time)(dev, + timestamp)); } int @@ -3451,7 +3496,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_reg, -ENOTSUP); - return (*dev->dev_ops->get_reg)(dev, info); + return eth_err(port_id, (*dev->dev_ops->get_reg)(dev, info)); } int @@ -3463,7 +3508,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_eeprom_length, -ENOTSUP); - return (*dev->dev_ops->get_eeprom_length)(dev); + return eth_err(port_id, (*dev->dev_ops->get_eeprom_length)(dev)); } int @@ -3475,7 +3520,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_eeprom, -ENOTSUP); - return (*dev->dev_ops->get_eeprom)(dev, info); + return eth_err(port_id, (*dev->dev_ops->get_eeprom)(dev, info)); } int @@ -3487,7 +3532,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->set_eeprom, -ENOTSUP); - return (*dev->dev_ops->set_eeprom)(dev, info); + return eth_err(port_id, (*dev->dev_ops->set_eeprom)(dev, info)); } int @@ -3502,7 +3547,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, memset(dcb_info, 0, sizeof(struct rte_eth_dcb_info)); RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_dcb_info, -ENOTSUP); - return (*dev->dev_ops->get_dcb_info)(dev, dcb_info); + return eth_err(port_id, (*dev->dev_ops->get_dcb_info)(dev, dcb_info)); } int @@ -3525,7 +3570,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->l2_tunnel_eth_type_conf, -ENOTSUP); - return (*dev->dev_ops->l2_tunnel_eth_type_conf)(dev, l2_tunnel); + return eth_err(port_id, (*dev->dev_ops->l2_tunnel_eth_type_conf)(dev, + l2_tunnel)); } int @@ -3556,7 +3602,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->l2_tunnel_offload_set, -ENOTSUP); - return (*dev->dev_ops->l2_tunnel_offload_set)(dev, l2_tunnel, mask, en); + return eth_err(port_id, (*dev->dev_ops->l2_tunnel_offload_set)(dev, + l2_tunnel, mask, en)); } static void diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 3aa9d3f..936bf79 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -2047,6 +2047,7 @@ int rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_queue, * memory buffers to populate each descriptor of the receive ring. * @return * - 0: Success, receive queue correctly set up. + * - -EIO: if device is removed. * - -EINVAL: The size of network buffers which can be allocated from the * memory pool does not fit the various buffer sizes allowed by the * device controller. @@ -2147,6 +2148,7 @@ int rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id, * @return * - 0: Success, the receive queue is started. * - -EINVAL: The port_id or the queue_id out of range. + * - -EIO: if device is removed. * - -ENOTSUP: The function not supported in PMD driver. */ int rte_eth_dev_rx_queue_start(uint16_t port_id, uint16_t rx_queue_id); @@ -2163,6 +2165,7 @@ int rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id, * @return * - 0: Success, the receive queue is stopped. * - -EINVAL: The port_id or the queue_id out of range. + * - -EIO: if device is removed. * - -ENOTSUP: The function not supported in PMD driver. */ int rte_eth_dev_rx_queue_stop(uint16_t port_id, uint16_t rx_queue_id); @@ -2180,6 +2183,7 @@ int rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id, * @return * - 0: Success, the transmit queue is started. * - -EINVAL: The port_id or the queue_id out of range. + * - -EIO: if device is removed. * - -ENOTSUP: The function not supported in PMD driver. */ int rte_eth_dev_tx_queue_start(uint16_t port_id, uint16_t tx_queue_id); @@ -2196,6 +2200,7 @@ int rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id, * @return * - 0: Success, the transmit queue is stopped. * - -EINVAL: The port_id or the queue_id out of range. + * - -EIO: if device is removed. * - -ENOTSUP: The function not supported in PMD driver. */ int rte_eth_dev_tx_queue_stop(uint16_t port_id, uint16_t tx_queue_id); @@ -2297,7 +2302,7 @@ int rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id, * - (-EINVAL) if port identifier is invalid. * - (-ENOTSUP) if hardware doesn't support this function. * - (-EPERM) if not ran from the primary process. - * - (-EIO) if re-initialisation failed. + * - (-EIO) if re-initialisation failed or device is removed. * - (-ENOMEM) if the reset failed due to OOM. * - (-EAGAIN) if the reset temporarily failed and should be retried later. */ @@ -2533,6 +2538,7 @@ int rte_eth_xstats_get_by_id(uint16_t port_id, const uint64_t *ids, * @return * 0 on success * -ENODEV for invalid port_id, + * -EIO if device is removed, * -EINVAL if the xstat_name doesn't exist in port_id */ int rte_eth_xstats_get_id_by_name(uint16_t port_id, const char *xstat_name, @@ -2624,6 +2630,7 @@ int rte_eth_dev_set_rx_queue_stats_mapping(uint16_t port_id, * - (0) if successful. * - (-ENOTSUP) if operation is not supported. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - (>0) if *fw_size* is not enough to store firmware version, return * the size of the non truncated string. */ @@ -2695,6 +2702,7 @@ int rte_eth_dev_get_supported_ptypes(uint16_t port_id, uint32_t ptype_mask, * - (0) if successful. * - (-ENOTSUP) if operation is not supported. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - (-EINVAL) if *mtu* invalid. * - (-EBUSY) if operation is not allowed when the port is running */ @@ -2715,6 +2723,7 @@ int rte_eth_dev_get_supported_ptypes(uint16_t port_id, uint32_t ptype_mask, * - (0) if successful. * - (-ENOSUP) if hardware-assisted VLAN filtering not configured. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - (-ENOSYS) if VLAN filtering on *port_id* disabled. * - (-EINVAL) if *vlan_id* > 4095. */ @@ -2757,6 +2766,7 @@ int rte_eth_dev_set_vlan_strip_on_queue(uint16_t port_id, uint16_t rx_queue_id, * - (0) if successful. * - (-ENOSUP) if hardware-assisted VLAN TPID setup is not supported. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. */ int rte_eth_dev_set_vlan_ether_type(uint16_t port_id, enum rte_vlan_type vlan_type, @@ -2781,6 +2791,7 @@ int rte_eth_dev_set_vlan_ether_type(uint16_t port_id, * - (0) if successful. * - (-ENOSUP) if hardware-assisted VLAN filtering not configured. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. */ int rte_eth_dev_set_vlan_offload(uint16_t port_id, int offload_mask); @@ -3522,6 +3533,7 @@ struct rte_eth_dev_tx_buffer { * @return * Failure: < 0 * -ENODEV: Invalid interface + * -EIO: device is removed * -ENOTSUP: Driver does not support function * Success: >= 0 * 0-n: Number of packets freed. More packets may still remain in ring that @@ -3634,6 +3646,7 @@ int _rte_eth_dev_callback_process(struct rte_eth_dev *dev, * - (-ENOTSUP) if underlying hardware OR driver doesn't support * that operation. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. */ int rte_eth_dev_rx_intr_enable(uint16_t port_id, uint16_t queue_id); @@ -3655,6 +3668,7 @@ int _rte_eth_dev_callback_process(struct rte_eth_dev *dev, * - (-ENOTSUP) if underlying hardware OR driver doesn't support * that operation. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. */ int rte_eth_dev_rx_intr_disable(uint16_t port_id, uint16_t queue_id); @@ -3712,6 +3726,7 @@ int rte_eth_dev_rx_intr_ctl_q(uint16_t port_id, uint16_t queue_id, * - (-ENOTSUP) if underlying hardware OR driver doesn't support * that operation. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. */ int rte_eth_led_on(uint16_t port_id); @@ -3726,6 +3741,7 @@ int rte_eth_dev_rx_intr_ctl_q(uint16_t port_id, uint16_t queue_id, * - (-ENOTSUP) if underlying hardware OR driver doesn't support * that operation. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. */ int rte_eth_led_off(uint16_t port_id); @@ -3740,6 +3756,7 @@ int rte_eth_dev_rx_intr_ctl_q(uint16_t port_id, uint16_t queue_id, * - (0) if successful. * - (-ENOTSUP) if hardware doesn't support flow control. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. */ int rte_eth_dev_flow_ctrl_get(uint16_t port_id, struct rte_eth_fc_conf *fc_conf); @@ -3756,7 +3773,7 @@ int rte_eth_dev_flow_ctrl_get(uint16_t port_id, * - (-ENOTSUP) if hardware doesn't support flow control mode. * - (-ENODEV) if *port_id* invalid. * - (-EINVAL) if bad parameter - * - (-EIO) if flow control setup failure + * - (-EIO) if flow control setup failure or device is removed. */ int rte_eth_dev_flow_ctrl_set(uint16_t port_id, struct rte_eth_fc_conf *fc_conf); @@ -3774,7 +3791,7 @@ int rte_eth_dev_flow_ctrl_set(uint16_t port_id, * - (-ENOTSUP) if hardware doesn't support priority flow control mode. * - (-ENODEV) if *port_id* invalid. * - (-EINVAL) if bad parameter - * - (-EIO) if flow control setup failure + * - (-EIO) if flow control setup failure or device is removed. */ int rte_eth_dev_priority_flow_ctrl_set(uint16_t port_id, struct rte_eth_pfc_conf *pfc_conf); @@ -3794,6 +3811,7 @@ int rte_eth_dev_priority_flow_ctrl_set(uint16_t port_id, * - (0) if successfully added or *mac_addr" was already added. * - (-ENOTSUP) if hardware doesn't support this feature. * - (-ENODEV) if *port* is invalid. + * - (-EIO) if device is removed. * - (-ENOSPC) if no more MAC addresses can be added. * - (-EINVAL) if MAC address is invalid. */ @@ -3845,6 +3863,7 @@ int rte_eth_dev_default_mac_addr_set(uint16_t port, * - (0) if successful. * - (-ENOTSUP) if hardware doesn't support. * - (-EINVAL) if bad parameter. + * - (-EIO) if device is removed. */ int rte_eth_dev_rss_reta_update(uint16_t port, struct rte_eth_rss_reta_entry64 *reta_conf, @@ -3864,6 +3883,7 @@ int rte_eth_dev_rss_reta_update(uint16_t port, * - (0) if successful. * - (-ENOTSUP) if hardware doesn't support. * - (-EINVAL) if bad parameter. + * - (-EIO) if device is removed. */ int rte_eth_dev_rss_reta_query(uint16_t port, struct rte_eth_rss_reta_entry64 *reta_conf, @@ -3885,6 +3905,7 @@ int rte_eth_dev_rss_reta_query(uint16_t port, * - (0) if successful. * - (-ENOTSUP) if hardware doesn't support. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - (-EINVAL) if bad parameter. */ int rte_eth_dev_uc_hash_table_set(uint16_t port, struct ether_addr *addr, @@ -3905,6 +3926,7 @@ int rte_eth_dev_uc_hash_table_set(uint16_t port, struct ether_addr *addr, * - (0) if successful. * - (-ENOTSUP) if hardware doesn't support. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - (-EINVAL) if bad parameter. */ int rte_eth_dev_uc_all_hash_table_set(uint16_t port, uint8_t on); @@ -3928,6 +3950,7 @@ int rte_eth_dev_uc_hash_table_set(uint16_t port, struct ether_addr *addr, * - (0) if successful. * - (-ENOTSUP) if hardware doesn't support this feature. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - (-EINVAL) if the mr_conf information is not correct. */ int rte_eth_mirror_rule_set(uint16_t port_id, @@ -3946,6 +3969,7 @@ int rte_eth_mirror_rule_set(uint16_t port_id, * - (0) if successful. * - (-ENOTSUP) if hardware doesn't support this feature. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - (-EINVAL) if bad parameter. */ int rte_eth_mirror_rule_reset(uint16_t port_id, @@ -3964,6 +3988,7 @@ int rte_eth_mirror_rule_reset(uint16_t port_id, * - (0) if successful. * - (-ENOTSUP) if hardware doesn't support this feature. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - (-EINVAL) if bad parameter. */ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, @@ -3979,6 +4004,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, * @return * - (0) if successful. * - (-ENODEV) if port identifier is invalid. + * - (-EIO) if device is removed. * - (-ENOTSUP) if hardware doesn't support. * - (-EINVAL) if bad parameter. */ @@ -3996,6 +4022,7 @@ int rte_eth_dev_rss_hash_update(uint16_t port_id, * @return * - (0) if successful. * - (-ENODEV) if port identifier is invalid. + * - (-EIO) if device is removed. * - (-ENOTSUP) if hardware doesn't support RSS. */ int @@ -4017,6 +4044,7 @@ int rte_eth_dev_rss_hash_update(uint16_t port_id, * @return * - (0) if successful. * - (-ENODEV) if port identifier is invalid. + * - (-EIO) if device is removed. * - (-ENOTSUP) if hardware doesn't support tunnel type. */ int @@ -4039,6 +4067,7 @@ int rte_eth_dev_rss_hash_update(uint16_t port_id, * @return * - (0) if successful. * - (-ENODEV) if port identifier is invalid. + * - (-EIO) if device is removed. * - (-ENOTSUP) if hardware doesn't support tunnel type. */ int @@ -4057,6 +4086,7 @@ int rte_eth_dev_rss_hash_update(uint16_t port_id, * - (0) if successful. * - (-ENOTSUP) if hardware doesn't support this filter type. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. */ int rte_eth_dev_filter_supported(uint16_t port_id, enum rte_filter_type filter_type); @@ -4077,6 +4107,7 @@ int rte_eth_dev_filter_supported(uint16_t port_id, * - (0) if successful. * - (-ENOTSUP) if hardware doesn't support. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - others depends on the specific operations implementation. */ int rte_eth_dev_filter_ctrl(uint16_t port_id, enum rte_filter_type filter_type, @@ -4092,6 +4123,7 @@ int rte_eth_dev_filter_ctrl(uint16_t port_id, enum rte_filter_type filter_type, * @return * - (0) if successful. * - (-ENODEV) if port identifier is invalid. + * - (-EIO) if device is removed. * - (-ENOTSUP) if hardware doesn't support. */ int rte_eth_dev_get_dcb_info(uint16_t port_id, @@ -4299,6 +4331,7 @@ int rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id, * - (0) if successful. * - (-ENOTSUP) if hardware doesn't support. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - others depends on the specific operations implementation. */ int rte_eth_dev_get_reg_info(uint16_t port_id, struct rte_dev_reg_info *info); @@ -4312,6 +4345,7 @@ int rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id, * - (>=0) EEPROM size if successful. * - (-ENOTSUP) if hardware doesn't support. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - others depends on the specific operations implementation. */ int rte_eth_dev_get_eeprom_length(uint16_t port_id); @@ -4328,6 +4362,7 @@ int rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id, * - (0) if successful. * - (-ENOTSUP) if hardware doesn't support. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - others depends on the specific operations implementation. */ int rte_eth_dev_get_eeprom(uint16_t port_id, struct rte_dev_eeprom_info *info); @@ -4344,6 +4379,7 @@ int rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id, * - (0) if successful. * - (-ENOTSUP) if hardware doesn't support. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - others depends on the specific operations implementation. */ int rte_eth_dev_set_eeprom(uint16_t port_id, struct rte_dev_eeprom_info *info); @@ -4362,6 +4398,7 @@ int rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id, * @return * - (0) if successful. * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. * - (-ENOTSUP) if PMD of *port_id* doesn't support multicast filtering. * - (-ENOSPC) if *port_id* has not enough multicast filtering resources. */ @@ -4378,6 +4415,7 @@ int rte_eth_dev_set_mc_addr_list(uint16_t port_id, * @return * - 0: Success. * - -ENODEV: The port ID is invalid. + * - -EIO: if device is removed. * - -ENOTSUP: The function is not supported by the Ethernet driver. */ int rte_eth_timesync_enable(uint16_t port_id); @@ -4391,6 +4429,7 @@ int rte_eth_dev_set_mc_addr_list(uint16_t port_id, * @return * - 0: Success. * - -ENODEV: The port ID is invalid. + * - -EIO: if device is removed. * - -ENOTSUP: The function is not supported by the Ethernet driver. */ int rte_eth_timesync_disable(uint16_t port_id); @@ -4410,6 +4449,7 @@ int rte_eth_dev_set_mc_addr_list(uint16_t port_id, * - 0: Success. * - -EINVAL: No timestamp is available. * - -ENODEV: The port ID is invalid. + * - -EIO: if device is removed. * - -ENOTSUP: The function is not supported by the Ethernet driver. */ int rte_eth_timesync_read_rx_timestamp(uint16_t port_id, @@ -4427,6 +4467,7 @@ int rte_eth_timesync_read_rx_timestamp(uint16_t port_id, * - 0: Success. * - -EINVAL: No timestamp is available. * - -ENODEV: The port ID is invalid. + * - -EIO: if device is removed. * - -ENOTSUP: The function is not supported by the Ethernet driver. */ int rte_eth_timesync_read_tx_timestamp(uint16_t port_id, @@ -4446,6 +4487,7 @@ int rte_eth_timesync_read_tx_timestamp(uint16_t port_id, * @return * - 0: Success. * - -ENODEV: The port ID is invalid. + * - -EIO: if device is removed. * - -ENOTSUP: The function is not supported by the Ethernet driver. */ int rte_eth_timesync_adjust_time(uint16_t port_id, int64_t delta); @@ -4481,6 +4523,7 @@ int rte_eth_timesync_read_tx_timestamp(uint16_t port_id, * - 0: Success. * - -EINVAL: No timestamp is available. * - -ENODEV: The port ID is invalid. + * - -EIO: if device is removed. * - -ENOTSUP: The function is not supported by the Ethernet driver. */ int rte_eth_timesync_write_time(uint16_t port_id, const struct timespec *time); @@ -4521,6 +4564,7 @@ int rte_eth_timesync_read_tx_timestamp(uint16_t port_id, * @return * - (0) if successful. * - (-ENODEV) if port identifier is invalid. + * - (-EIO) if device is removed. * - (-ENOTSUP) if hardware doesn't support tunnel type. */ int @@ -4548,6 +4592,7 @@ int rte_eth_timesync_read_tx_timestamp(uint16_t port_id, * @return * - (0) if successful. * - (-ENODEV) if port identifier is invalid. + * - (-EIO) if device is removed. * - (-ENOTSUP) if hardware doesn't support tunnel type. */ int -- 1.8.3.1