From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10064.outbound.protection.outlook.com [40.107.1.64]) by dpdk.org (Postfix) with ESMTP id 89E691B2A9 for ; Thu, 18 Jan 2018 12:27:45 +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=SRVjDSLJoWeNJhzyhj2Fxvh4deahSLI5SfifCtNe9po=; b=nIOFD9xOvfNlje34euJuJ1JhPqrNHCcOnSj0icr384DeMOP5Ag2W7yicnYTWx06yb/etoBVE8tw4vV9Kx3hqZnOfDHSgTcxUYQX0cLkIiHklH7YgG6i1bZBbPya+ZxjTIgMTePZs3ckQVqce5z9y3uis26RLpk937K1MniJdZvc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=matan@mellanox.com; Received: from mellanox.com (37.142.13.130) by AM6PR0502MB3797.eurprd05.prod.outlook.com (2603:10a6:209:a::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.428.17; Thu, 18 Jan 2018 11:27:42 +0000 From: Matan Azrad To: Ferruh Yigit , Adrien Mazarguil , Gaetan Rivet Cc: Thomas Monjalon , dev@dpdk.org Date: Thu, 18 Jan 2018 11:27:12 +0000 Message-Id: <1516274834-19755-5-git-send-email-matan@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1516274834-19755-1-git-send-email-matan@mellanox.com> References: <1516220357-13013-1-git-send-email-matan@mellanox.com> <1516274834-19755-1-git-send-email-matan@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: HE1PR0102CA0042.eurprd01.prod.exchangelabs.com (2603:10a6:7:7d::19) To AM6PR0502MB3797.eurprd05.prod.outlook.com (2603:10a6:209:a::26) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bfee9f4a-3e9b-4823-249d-08d55e667df9 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(48565401081)(2017052603307)(7153060)(7193020); SRVR:AM6PR0502MB3797; X-Microsoft-Exchange-Diagnostics: 1; AM6PR0502MB3797; 3:7edPox9r/cLN51ya0PBH2u9xxxlyCdMTIgkhuVOfXAzTScKydnDunC8OX2BUi6HW9+QYDDibqo02serqVqqFy1XDNCNgOHEdjYfLiAqRp2fZyENHjhNZeYfHrTKCAi0CWuTebH3ia0Hl9vxR+02IZuWVGIZcBXEuXo5vMGkvHZNHvav05YDKKhSoRj+LnkvbUvJldORQibRC7aiodD13hk+a67/yp02oTpHA2TCUi+YR67T6kkMEnKmGKPkZI9cm; 25:Z8nI2H/ktkncGjQzMpSgXxjj5Nuuvs56MPB+IT6VZZ1Ro/+86eU0spEYpe9wb3KsHNQka/XA7BYW8uL2v5GVxiUzr9OJj3V8BaaloFJmq59s3xcOL1gUhOIZ5Q7sde/+58pfYWLAQuZKkwfjdq6I7VgIocRjPNO7cMkJj4A+XjMuGxZdx4LvQh4GL41Cv3eZF1UJnhVy9mu71dMAZUqAp7LARLcScwdy2BVT5AqQ3VaZukgKrShAoaJxlwrAfkv4UlcNoZ//itrqlu9dgQM6OQvlyvJtNvO+xdO1TLFSRVfkRX9P57R/nOTdXhDY52a4a7x29CKSvajDvb7pyM4leg==; 31:QF5+JOw/QS3u1fufe09ubivDPa8HKOH9hYXmbY8uV8ol7PPB8DBWof7DqRdfwdNiMIRQ+ZF5GXdHzV22cJ+8ZaI7XcI5dv3YNUPv2vlymt40TNOUlNiDtSLtMGpVu7pkZ8A49Mw7vYeoqXKxaErZdOLOLVrPH6r6eVrVy1H2kcyBh1/fApFvUzpaX2XXAmojzz7Xup5amer8fp+jtA58iX22h3hmLEo37+TpPePIiQQ= X-MS-TrafficTypeDiagnostic: AM6PR0502MB3797: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM6PR0502MB3797; 20:MyE1lx1B3s8+JAd5ctvVG3FhYjjaC5tq11hGV9BPrtVNdqcl3J4h6HtpysAkmPvyxizl3Tl3sXhTBgjJVgtbZSPw/r6Ke7D8999ONbeX7k/ckZY8WIK+8/Nj6AUHBI2MnyZ0XzsDqxgs7KkhhNBM70qmi/JvGH3lWsr1rV1snUB1W86VfFcS3C0eK07UgKVja+abg9JVJWUeIQKbLXODjaR2r4bSrkJ5hYr8HDxYnTil6Jbwy3h9+8uyiKb0S2Dp90HZicFT5HwFqZa8PI6Em0u0izUq0S3bF+lpjBRRthweOeV3flp0q+C2Dq7TOfCGWx1rNpjm8x+f00PhFxxnxyGQdNINh0ipiQQ2MWkIb2z20jIPknEG5DWKItn7DUT80ZMZ7opBNw9KMIgcqI4PyEJMUk2bWXL6J+ZwYOduj/sMFXQr0JWlSi/KARw2xs3YdwpTEoqHZRvvfvFy9RFTqBK7uslMzuAApGg8WpybflBrDvEofwVJYiOsdnphC1W3; 4:eT3xHp09USCIQmrWTuowMEbcQgPfzVXLaQTjbCo7lZQx/m0naYSdxHgfL7h3rtO/mCPjfb010D/9k4OsYd1OonA7oWDLgxDnusZGMEE/WfAOjvSF4WeXWDVQwBfbhqF0Zy94d2jwflxxihMxnuDepcnwglrBr9l9WrQoMWc6SZ4ZbOuqc6o4UF8FU2QAOuUncPc+LmWrUpUuTroEOv433fYXjGWhzc0f5rayYPT1Ki7fM6zG7aUOvzhBoXsBb8n4IYq4gVlegTXxQHEztFAsCIe1zOfcQjnf0kdToadj0sBGsRXwtHYLXa6W5ip/Bz17 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(20558992708506); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(3231023)(2400060)(944501161)(10201501046)(6055026)(6041268)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123564045)(6072148)(201708071742011); SRVR:AM6PR0502MB3797; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM6PR0502MB3797; X-Forefront-PRVS: 05568D1FF7 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(376002)(366004)(39860400002)(346002)(39380400002)(396003)(199004)(189003)(53936002)(6116002)(76176011)(386003)(4720700003)(59450400001)(26005)(7736002)(305945005)(50466002)(66066001)(2906002)(47776003)(16586007)(5890100001)(8676002)(110136005)(478600001)(316002)(25786009)(21086003)(2950100002)(48376002)(6666003)(51416003)(52116002)(7696005)(81156014)(8936002)(81166006)(4326008)(86362001)(16526018)(97736004)(68736007)(36756003)(50226002)(5660300001)(105586002)(69596002)(3846002)(53946003)(106356001)(33026002)(55016002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR0502MB3797; 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; AM6PR0502MB3797; 23:p1GZu6zmJC+JU1ca9WJzeZ2SU0scLlqrF3YkO5+?= =?us-ascii?Q?gfe2Kldv6ULBHhlnxOVa4rYHdrLErSrspUNAMxXs02/MJNQ3rTIvLtFAffRI?= =?us-ascii?Q?k5ukFj2DNyk49penK71hj1QgY5aXCMyI7X4zDDwq/pJCmUe3v1ach8LI7dAy?= =?us-ascii?Q?4xdj/GeZwjCqLmUXdyBz1rRWJOoIWmiPYy6jska759KS/CcKqXlBIiLAqAWg?= =?us-ascii?Q?mp3UWi27xvJjE8TJZUQZJzutHuRvqUyl+k2qnXbWBygznT5vHsi3vzAOCSG6?= =?us-ascii?Q?hqKJCpKxgeWvJKsDDhYWjDAt7n/SfJ6Gekz4yVaCQJvEl2P335WnxQkeIMDC?= =?us-ascii?Q?GUJsqt6rsYFW1Sf5ntPY6K4vQfPVfAKXLuOCIEvWkuff0VEzITjO5H/Befgp?= =?us-ascii?Q?0YNQf5lT7o7JjYpE883C8pWcEyCBn0jml9cF/RQ/HJglUK1ApsV0XmrMlWDk?= =?us-ascii?Q?LKP8kBl6NEmY+jCZ//4xLJD9cU065ttZCwm93HRHz/Oz7aH0c8eoJiH2yUSS?= =?us-ascii?Q?+Uu5vc7t8YGLjuI0Rpggv2u/vpvhhq8XUwO8Zi/SzdPYHcudwVNgOUUeHtrl?= =?us-ascii?Q?h1KO6THdk+rNXSsHSAzmLchQBR677qpvtwOmjTsWfa7XESakOtyoabHBLKra?= =?us-ascii?Q?oZhGK1tw7ZEx4fEqlbsEw7hL8pLxWJE3Aa80vV2TSM6NGm5voe6JoN/ywXuX?= =?us-ascii?Q?/fLVbU+zSnRIxSgCIPJ/N3ExnIqNNqEf7NfzP+dF6MPzhwxqQefYs/UG1QQ6?= =?us-ascii?Q?eT2fiC2Pb2LcbLQTryEzmVhEYHPPIddlzuNGxFIlLXiluJUwqCx4l+OEpZ3v?= =?us-ascii?Q?1Y3Dh4rpCg0YRf+YlmHvb9sks9g4JLAQtHO6im9hwdaNWnuT3PMVGwm6m/yL?= =?us-ascii?Q?+kkSL0rmZmZ25kSZgcwXhtWWuad/6ksiYQN8Q0EzPgwb/3fn1n9MsDhEjwxT?= =?us-ascii?Q?VE88XvhpNA0wVatLl/mxsq3Bb5b4nSpTkseKNpF60sX1jYZAebCtBQqatF3W?= =?us-ascii?Q?aPrLWY/8DtTyFUhmepRNIZ858bbuwRSSLqVuIHkhRYxyivVLjCzpysqnuQ/8?= =?us-ascii?Q?N3zuRpR8jZujraKwK2lelhO2WkC0l7YYoDszVLAFToQwd9y2jEfH9zWn6PpV?= =?us-ascii?Q?NGyC1GmghLyjFzqc/v9ZWr63Agx9bZ86o50YA+7d8qW3igxjhSpI+YtcW7Wr?= =?us-ascii?Q?a5L1W9El9E6hcqTPxF51GNLiC3pSzJp5uQwAfAzGwA9oll3T9zKd6L0/i3A?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM6PR0502MB3797; 6:dyDL/eHR5Hp2tbz3ezQcU1oK6tUryctww/ev1hbg//xlEuGssU9gRZMs/FsuFVgmS7BhhcoU5u0gHO+av5fs1HUp9XzUdSG6ZcLmWBIrQ7ajx1gwwyzz0mq7nNICDYxTMKcxmj6Qjv4CuKxNI5WHuoC91zG0EpOLxFiXFc5icyZa79jQwZf29h8xE7L8fZ5vjttSOVJ2RQWWNB6zj2erBEQiwUeY3BQaTF6nvTpZfg3Ri7tM/cGE4jN3pqHrxGr0scKA7LIYfnER5kvvi6u8QQCZiP/2JjN3TK/46W5G6ifejUM0MAEDTd4YJBOLktMnBDBKTYZBUVjzNY5dYYm8Bpi3+raPzOnli9mTcOK4d68=; 5:aijgDfCdnrLUBPhX4519LEqJV0Ces3QJooGf5JUcnp9Gt9ZZ2eakEFX8QacIuoJxmsfBHILjc55IquLHDHa6kv34tbKhdyPi7fZGDNyCQ0ioLLRUo2Qy9Rjg/7EqfDI9hDMxKWE8Du+nLdbZ8eymeaW9wZS91ATuJWdx2V8BVTs=; 24:OMbiVSNMB/+yFcMTKKuhNLZ1hA7RuEfNkAjN3Aka7oFxttxHaTGCiXrDTYN/e5PoVjwmrYXhQ7Yi5T09bu8bmLzRUEjCc9sB4U9Hr1SPchA=; 7:vC4Dj9nKLj/0VH9LNrrgwzTIk6IfaHI2PCjKZXBesKq8aWBJkipt07Zp4bEaHga3/ZmhkqGUgRhgCAp1mwHU+7lAblwD+wOTTIMB2gNXM2Z2tSDjyZyx7sNyw0l2sLXkNDcq0wCiqCHJH25DPMC89D2cBEctPQ2Vx5UvYpTSu8W08R13d7KaroPApJ3ZsoVIeFfi8AIXesi/uZocETNZA4tNePkRkLtZyaF6RQxzHnLqDfEV/+m+oUyqad7aArRB SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2018 11:27:42.5323 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bfee9f4a-3e9b-4823-249d-08d55e667df9 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR0502MB3797 Subject: [dpdk-dev] [PATCH v6 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: Thu, 18 Jan 2018 11:27:46 -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 Acked-by: Thomas Monjalon --- lib/librte_ether/rte_ethdev.c | 192 +++++++++++++++++++++++++++--------------- lib/librte_ether/rte_ethdev.h | 51 ++++++++++- 2 files changed, 170 insertions(+), 73 deletions(-) diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index c93cec1..7044159 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -338,6 +338,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) @@ -492,7 +502,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)); } @@ -518,7 +529,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)); } @@ -544,7 +555,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)); } @@ -570,7 +582,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)); } @@ -888,7 +900,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. */ @@ -898,7 +910,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; @@ -998,7 +1010,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); @@ -1040,7 +1052,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 @@ -1053,7 +1065,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 @@ -1090,7 +1102,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 @@ -1214,7 +1226,7 @@ struct rte_eth_dev * dev->data->min_rx_buf_size = mbp_buf_size; } - return ret; + return eth_err(port_id, ret); } /** @@ -1333,8 +1345,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 @@ -1390,14 +1402,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 @@ -1534,7 +1548,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 @@ -1580,12 +1594,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; @@ -1765,8 +1779,12 @@ struct rte_eth_dev * if (ids && no_ext_stat_requested) { rte_eth_basic_stats_get_names(dev, xstats_names_copy); } else { - rte_eth_xstats_get_names(port_id, xstats_names_copy, + ret = rte_eth_xstats_get_names(port_id, xstats_names_copy, expected_entries); + if (ret < 0) { + free(xstats_names_copy); + return ret; + } } /* Filter stats */ @@ -1813,7 +1831,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; } @@ -1829,8 +1847,12 @@ struct rte_eth_dev * unsigned int count = 0, i, q; uint64_t val, *stats_ptr; uint16_t nb_rxqs, nb_txqs; + int ret; + + ret = rte_eth_stats_get(port_id, ð_stats); + if (ret < 0) + return ret; - rte_eth_stats_get(port_id, ð_stats); dev = &rte_eth_devices[port_id]; nb_rxqs = RTE_MIN(dev->data->nb_rx_queues, RTE_ETHDEV_QUEUE_STAT_CNTRS); @@ -1883,7 +1905,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]; basic_count = get_xstats_basic_count(dev); @@ -1966,6 +1991,7 @@ struct rte_eth_dev * unsigned int count = 0, i; signed int xcount = 0; uint16_t nb_rxqs, nb_txqs; + int ret; RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL); @@ -1988,14 +2014,17 @@ 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) return count + xcount; /* now fill the xstats structure */ - count = rte_eth_basic_stats_get(port_id, xstats); + ret = rte_eth_basic_stats_get(port_id, xstats); + if (ret < 0) + return ret; + count = ret; for (i = 0; i < count; i++) xstats[i].id = i; @@ -2045,8 +2074,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)); } @@ -2054,8 +2083,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 @@ -2067,7 +2096,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 @@ -2157,7 +2187,7 @@ struct rte_eth_dev * if (!ret) dev->data->mtu = mtu; - return ret; + return eth_err(port_id, ret); } int @@ -2197,7 +2227,7 @@ struct rte_eth_dev * vfc->ids[vidx] &= ~(UINT64_C(1) << vbit); } - return ret; + return eth_err(port_id, ret); } int @@ -2230,7 +2260,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 @@ -2308,7 +2339,7 @@ struct rte_eth_dev * &dev->data->dev_conf.rxmode); } - return ret; + return eth_err(port_id, ret); } int @@ -2343,9 +2374,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 @@ -2357,7 +2387,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 @@ -2373,7 +2403,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 @@ -2391,7 +2421,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; } @@ -2466,7 +2497,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 @@ -2486,7 +2518,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 @@ -2498,7 +2531,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 @@ -2510,7 +2544,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 @@ -2532,7 +2567,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 @@ -2555,7 +2591,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 @@ -2566,7 +2603,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 @@ -2577,7 +2614,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)); } /* @@ -2653,7 +2690,7 @@ struct rte_eth_dev * dev->data->mac_pool_sel[index] |= (1ULL << pool); } - return ret; + return eth_err(port_id, ret); } int @@ -2779,7 +2816,7 @@ struct rte_eth_dev * &dev->data->hash_mac_addrs[index]); } - return ret; + return eth_err(port_id, ret); } int @@ -2792,7 +2829,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, @@ -2822,7 +2860,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 @@ -2860,7 +2899,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 @@ -2873,7 +2913,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)); } RTE_INIT(eth_dev_init_cb_lists) @@ -3137,7 +3178,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 @@ -3151,7 +3193,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)); } @@ -3179,7 +3222,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 * @@ -3429,7 +3473,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 @@ -3441,7 +3486,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 @@ -3453,7 +3498,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 @@ -3466,7 +3511,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 @@ -3479,7 +3525,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 @@ -3491,7 +3538,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 @@ -3503,7 +3551,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 @@ -3515,7 +3564,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 @@ -3527,7 +3577,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 @@ -3539,7 +3589,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 @@ -3551,7 +3601,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 @@ -3563,7 +3613,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 @@ -3578,7 +3628,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 @@ -3601,7 +3651,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 @@ -3632,7 +3683,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 18c14e9..cf4defb 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -2023,6 +2023,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. @@ -2123,6 +2124,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); @@ -2139,6 +2141,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); @@ -2156,6 +2159,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); @@ -2172,6 +2176,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); @@ -2273,7 +2278,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. */ @@ -2509,6 +2514,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, @@ -2600,6 +2606,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. */ @@ -2671,6 +2678,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 */ @@ -2691,6 +2699,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. */ @@ -2733,6 +2742,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, @@ -2757,6 +2767,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); @@ -3498,6 +3509,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 @@ -3612,6 +3624,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); @@ -3633,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_disable(uint16_t port_id, uint16_t queue_id); @@ -3690,6 +3704,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); @@ -3704,6 +3719,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); @@ -3718,6 +3734,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); @@ -3734,7 +3751,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); @@ -3752,7 +3769,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); @@ -3772,6 +3789,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. */ @@ -3823,6 +3841,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, @@ -3842,6 +3861,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, @@ -3863,6 +3883,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, @@ -3883,6 +3904,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); @@ -3906,6 +3928,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, @@ -3924,6 +3947,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, @@ -3942,6 +3966,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, @@ -3957,6 +3982,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. */ @@ -3974,6 +4000,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 @@ -3995,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 tunnel type. */ int @@ -4017,6 +4045,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 @@ -4035,6 +4064,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); @@ -4055,6 +4085,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, @@ -4070,6 +4101,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, @@ -4277,6 +4309,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); @@ -4290,6 +4323,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); @@ -4306,6 +4340,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); @@ -4322,6 +4357,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); @@ -4340,6 +4376,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. */ @@ -4356,6 +4393,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); @@ -4369,6 +4407,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); @@ -4388,6 +4427,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, @@ -4405,6 +4445,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, @@ -4424,6 +4465,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); @@ -4459,6 +4501,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); @@ -4499,6 +4542,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 @@ -4526,6 +4570,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