get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/80924/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 80924,
    "url": "https://patches.dpdk.org/api/patches/80924/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1602768646-13142-12-git-send-email-arybchenko@solarflare.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1602768646-13142-12-git-send-email-arybchenko@solarflare.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1602768646-13142-12-git-send-email-arybchenko@solarflare.com",
    "date": "2020-10-15T13:30:45",
    "name": "[v2,11/11] ethdev: change stop device callback to return int",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "b36c4b965c1aca64f95809960fd98060a5417ab1",
    "submitter": {
        "id": 607,
        "url": "https://patches.dpdk.org/api/people/607/?format=api",
        "name": "Andrew Rybchenko",
        "email": "arybchenko@solarflare.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1602768646-13142-12-git-send-email-arybchenko@solarflare.com/mbox/",
    "series": [
        {
            "id": 13012,
            "url": "https://patches.dpdk.org/api/series/13012/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=13012",
            "date": "2020-10-15T13:30:34",
            "name": "ethdev: change device stop to return status",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/13012/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/80924/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/80924/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 300CBA04DB;\n\tThu, 15 Oct 2020 15:35:24 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 2896A1E981;\n\tThu, 15 Oct 2020 15:31:38 +0200 (CEST)",
            "from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com\n [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 85B051E960\n for <dev@dpdk.org>; Thu, 15 Oct 2020 15:31:28 +0200 (CEST)",
            "from mx1-us1.ppe-hosted.com (unknown [10.7.65.61])\n by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id\n 0EBC06011F; Thu, 15 Oct 2020 13:31:27 +0000 (UTC)",
            "from us4-mdac16-29.ut7.mdlocal (unknown [10.7.66.139])\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 09245800B0;\n Thu, 15 Oct 2020 13:31:27 +0000 (UTC)",
            "from mx1-us1.ppe-hosted.com (unknown [10.7.66.37])\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id\n 8174680055;\n Thu, 15 Oct 2020 13:31:24 +0000 (UTC)",
            "from webmail.solarflare.com (uk.solarflare.com [193.34.186.16])\n (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))\n (No client certificate requested)\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id\n 5FBD9B4008C;\n Thu, 15 Oct 2020 13:31:23 +0000 (UTC)",
            "from ukex01.SolarFlarecom.com (10.17.10.4) by\n ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id\n 15.0.1497.2; Thu, 15 Oct 2020 14:31:15 +0100",
            "from opal.uk.solarflarecom.com (10.17.10.1) by\n ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id\n 15.0.1497.2 via Frontend Transport; Thu, 15 Oct 2020 14:31:15 +0100",
            "from ukv-loginhost.uk.solarflarecom.com\n (ukv-loginhost.uk.solarflarecom.com [10.17.10.39])\n by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id 09FDVEHv025779;\n Thu, 15 Oct 2020 14:31:14 +0100",
            "from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1])\n by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id A1A911613A9;\n Thu, 15 Oct 2020 14:31:14 +0100 (BST)"
        ],
        "X-Virus-Scanned": "Proofpoint Essentials engine",
        "From": "Andrew Rybchenko <arybchenko@solarflare.com>",
        "To": "\"John W. Linville\" <linville@tuxdriver.com>, Ciara Loftus\n <ciara.loftus@intel.com>, Qi Zhang <qi.z.zhang@intel.com>, Shepard Siegel\n <shepard.siegel@atomicrules.com>, Ed Czeck <ed.czeck@atomicrules.com>, \"John\n Miller\" <john.miller@atomicrules.com>, Igor Russkikh\n <igor.russkikh@aquantia.com>, Pavel Belous <pavel.belous@aquantia.com>,\n Steven Webster <steven.webster@windriver.com>, Matt Peters\n <matt.peters@windriver.com>, Somalapuram Amaranath <asomalap@amd.com>, Rasesh\n Mody <rmody@marvell.com>, Shahed Shaikh <shshaikh@marvell.com>, \"Ajit\n Khaparde\" <ajit.khaparde@broadcom.com>, Somnath Kotur\n <somnath.kotur@broadcom.com>, Chas Williams <chas3@att.com>, \"Min Hu\n (Connor)\" <humin29@huawei.com>, Rahul Lakkireddy\n <rahul.lakkireddy@chelsio.com>, Hemant Agrawal <hemant.agrawal@nxp.com>,\n Sachin Saxena <sachin.saxena@oss.nxp.com>, Jeff Guo <jia.guo@intel.com>,\n Haiyue Wang <haiyue.wang@intel.com>, Marcin Wojtas <mw@semihalf.com>, \"Michal\n Krawczyk\" <mk@semihalf.com>, Guy Tzalik <gtzalik@amazon.com>, \"Evgeny\n Schemeilin\" <evgenys@amazon.com>, Igor Chauskin <igorch@amazon.com>,\n \"Gagandeep Singh\" <g.singh@nxp.com>, John Daley <johndale@cisco.com>, Hyong\n Youb Kim <hyonkim@cisco.com>, Gaetan Rivet <grive@u256.net>, Xiao Wang\n <xiao.w.wang@intel.com>, Ziyang Xuan <xuanziyang2@huawei.com>, Xiaoyun Wang\n <cloud.wangxiaoyun@huawei.com>, Guoyang Zhou <zhouguoyang@huawei.com>, \"Wei\n Hu (Xavier)\" <xavier.huwei@huawei.com>, Yisen Zhuang\n <yisen.zhuang@huawei.com>, Beilei Xing <beilei.xing@intel.com>, Jingjing Wu\n <jingjing.wu@intel.com>, Qiming Yang <qiming.yang@intel.com>, \"Alfredo\n Cardigliano\" <cardigliano@ntop.org>, Rosen Xu <rosen.xu@intel.com>, \"Ferruh\n Yigit\" <ferruh.yigit@intel.com>, Shijith Thotton <sthotton@marvell.com>,\n Srisivasubramanian Srinivasan <srinivasan@marvell.com>, Matan Azrad\n <matan@nvidia.com>, Shahaf Shuler <shahafs@nvidia.com>, Viacheslav Ovsiienko\n <viacheslavo@nvidia.com>, Zyta Szpak <zr@semihalf.com>, Liron Himi\n <lironh@marvell.com>, Stephen Hemminger <sthemmin@microsoft.com>, \"K. Y.\n Srinivasan\" <kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>, Long\n Li <longli@microsoft.com>, Martin Spinler <spinler@cesnet.cz>, Heinrich Kuhn\n <heinrich.kuhn@netronome.com>, Tetsuya Mukawa <mtetsuyah@gmail.com>, Harman\n Kalra <hkalra@marvell.com>, Jerin Jacob <jerinj@marvell.com>, Nithin\n Dabilpuram <ndabilpuram@marvell.com>, \"Kiran Kumar K\"\n <kirankumark@marvell.com>, Akhil Goyal <akhil.goyal@nxp.com>, \"Bruce\n Richardson\" <bruce.richardson@intel.com>, Andrew Rybchenko\n <andrew.rybchenko@oktetlabs.ru>, Jasvinder Singh <jasvinder.singh@intel.com>,\n Cristian Dumitrescu <cristian.dumitrescu@intel.com>, Keith Wiles\n <keith.wiles@intel.com>, Maciej Czekaj <mczekaj@marvell.com>, \"Maxime\n Coquelin\" <maxime.coquelin@redhat.com>, Chenbo Xia <chenbo.xia@intel.com>,\n Zhihong Wang <zhihong.wang@intel.com>, Yong Wang <yongwang@vmware.com>,\n Thomas Monjalon <thomas@monjalon.net>",
        "CC": "<dev@dpdk.org>, Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>",
        "Date": "Thu, 15 Oct 2020 14:30:45 +0100",
        "Message-ID": "<1602768646-13142-12-git-send-email-arybchenko@solarflare.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1602768646-13142-1-git-send-email-arybchenko@solarflare.com>",
        "References": "<1602682146-4722-1-git-send-email-arybchenko@solarflare.com>\n <1602768646-13142-1-git-send-email-arybchenko@solarflare.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-TM-AS-Product-Ver": "SMEX-12.5.0.1300-8.6.1012-25726.003",
        "X-TM-AS-Result": "No-3.051200-8.000000-10",
        "X-TMASE-MatchedRID": "KjD1bwMIPIXed0Ij9t5iQzKVTrGMDe/Dkos2tunL8DRjLp8Cm8vwF4gg\n kHfdF/Q7/7yMlJ1P+1GF0jPFsyHqkqPKM9uZBgjQNVRz+HwqL4JUE+MH85/4VB3RY4pGTCyHiiG\n PD3c6GvPTQUky8ZUXixqIdIVY5XOMaLxhTaCJKI9l1tleYYUuJ0loPruIq9jTBph69XjMbdlAHO\n g8qEtqyI+pAn19BHXOieYnNKQobKjTLBkSptG5BHYZxYoZm58FBnIRIVcCWN9SMUnCl2ZytO1vA\n bHwESsvl78RAUnUG5BF0kv+vQOmAPr252PTOmm/R/j040fRFpJezmeoa8MJ88c322cceBeE+L9A\n 4dCyMAmVdIB0POZpBEqNKUpOIfRVoqIp1AUZB5pbUzvsaHW6BpyqUJ2uHKFAGiPTaHrEWqtaKkw\n DKTo9epsVl52/xwxWrIptOCER/1Qxsx3JLN9uSQe06kQGFaIWMVx/3ZYby7+HX0cDZiY+DVg96P\n 8uI6M7iin/3K5DZ0aVG2JkMF2AH4+BOETL3RcxLyz9QvAyHjrnaaW2UTafyI+Ixb7djOSCCxjh3\n p6X5X/O2T4AVVhMQwHzcBosy7NyU2cj/ktxlWAdjoPUYuBywNoKfgOoKJc23xlVAWOrjgEPsPha\n 9Ebuwm7R4YbMNOKD3alQuZOtjAgZkSsIpkaLIiMJO6daqdyWzmsVTBhahkqHv8otQeUIQlXnLj+\n w+T4/0Qwb7vK5Vvhf0/WKe2O4micXXhtbe8tm8pHTorDcPMqR4K01VY0nv2i2BhDPfjxnBdktVe\n UMQ91729gJ2iUcAVlRYUDvlF3ucKqcXQuOZ6aeAiCmPx4NwJuJ+Pb8n/VxSnQ4MjwaO9cqtq5d3\n cxkNY3vcDTzyGs12kC7SwvGlKhDwb7Jglhh1lFkOwaJdCKgGObbx/Uctjc=",
        "X-TM-AS-User-Approved-Sender": "Yes",
        "X-TM-AS-User-Blocked-Sender": "No",
        "X-TMASE-Result": "10--3.051200-8.000000",
        "X-TMASE-Version": "SMEX-12.5.0.1300-8.6.1012-25726.003",
        "X-MDID": "1602768685-nIcXutQ0QYGk",
        "X-PPE-DISP": "1602768685;nIcXutQ0QYGk",
        "Subject": "[dpdk-dev] [PATCH v2 11/11] ethdev: change stop device callback to\n\treturn int",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>\n\nChange eth_dev_stop_t return value from void to int.\nMake eth_dev_stop_t implementations across all drivers to return\nnegative errno values if case of error conditions.\n\nSigned-off-by: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>\nSigned-off-by: Andrew Rybchenko <arybchenko@solarflare.com>\n---\n app/test/virtual_pmd.c                    |  4 ++-\n drivers/net/af_packet/rte_eth_af_packet.c |  3 +-\n drivers/net/af_xdp/rte_eth_af_xdp.c       |  3 +-\n drivers/net/ark/ark_ethdev.c              |  8 +++--\n drivers/net/atlantic/atl_ethdev.c         | 11 ++++---\n drivers/net/avp/avp_ethdev.c              |  6 ++--\n drivers/net/axgbe/axgbe_ethdev.c          |  8 +++--\n drivers/net/bnx2x/bnx2x_ethdev.c          |  6 ++--\n drivers/net/bnxt/bnxt_ethdev.c            | 14 ++++++---\n drivers/net/bnxt/bnxt_reps.c              | 15 ++++++---\n drivers/net/bnxt/bnxt_reps.h              |  4 +--\n drivers/net/bonding/eth_bond_private.h    |  2 +-\n drivers/net/bonding/rte_eth_bond_pmd.c    | 17 ++++++++---\n drivers/net/cxgbe/cxgbe_ethdev.c          |  6 ++--\n drivers/net/cxgbe/cxgbe_pfvf.h            |  2 +-\n drivers/net/dpaa/dpaa_ethdev.c            | 11 ++++---\n drivers/net/dpaa2/dpaa2_ethdev.c          |  6 ++--\n drivers/net/e1000/em_ethdev.c             | 15 ++++++---\n drivers/net/e1000/igb_ethdev.c            | 26 ++++++++++------\n drivers/net/ena/ena_ethdev.c              | 11 ++++---\n drivers/net/enetc/enetc_ethdev.c          |  9 ++++--\n drivers/net/enic/enic_ethdev.c            |  6 ++--\n drivers/net/enic/enic_vf_representor.c    |  6 ++--\n drivers/net/failsafe/failsafe_ops.c       | 23 +++++++++++---\n drivers/net/fm10k/fm10k_ethdev.c          | 11 +++++--\n drivers/net/hinic/hinic_pmd_ethdev.c      | 11 ++++---\n drivers/net/hns3/hns3_ethdev.c            |  9 ++++--\n drivers/net/hns3/hns3_ethdev_vf.c         |  9 ++++--\n drivers/net/i40e/i40e_ethdev.c            | 12 +++++---\n drivers/net/i40e/i40e_ethdev_vf.c         | 13 +++++---\n drivers/net/i40e/i40e_vf_representor.c    |  3 +-\n drivers/net/iavf/iavf_ethdev.c            | 14 ++++++---\n drivers/net/ice/ice_dcf_ethdev.c          |  6 ++--\n drivers/net/ice/ice_ethdev.c              | 13 +++++---\n drivers/net/igc/igc_ethdev.c              | 11 ++++---\n drivers/net/ionic/ionic_ethdev.c          |  6 ++--\n drivers/net/ipn3ke/ipn3ke_representor.c   |  4 ++-\n drivers/net/ixgbe/ixgbe_ethdev.c          | 37 +++++++++++++----------\n drivers/net/ixgbe/ixgbe_vf_representor.c  |  3 +-\n drivers/net/kni/rte_eth_kni.c             | 13 +++++---\n drivers/net/liquidio/lio_ethdev.c         | 17 ++++++++---\n drivers/net/mlx4/mlx4.c                   |  8 +++--\n drivers/net/mlx5/mlx5.h                   |  2 +-\n drivers/net/mlx5/mlx5_trigger.c           |  4 ++-\n drivers/net/mvneta/mvneta_ethdev.c        | 12 +++++---\n drivers/net/mvpp2/mrvl_ethdev.c           |  4 +--\n drivers/net/netvsc/hn_ethdev.c            | 10 +++---\n drivers/net/netvsc/hn_var.h               |  2 +-\n drivers/net/netvsc/hn_vf.c                | 13 ++++++--\n drivers/net/nfb/nfb_ethdev.c              |  9 ++++--\n drivers/net/nfp/nfp_net.c                 |  6 ++--\n drivers/net/null/rte_eth_null.c           |  6 ++--\n drivers/net/octeontx/octeontx_ethdev.c    | 10 +++---\n drivers/net/octeontx2/otx2_ethdev.c       |  4 ++-\n drivers/net/pcap/rte_eth_pcap.c           |  4 ++-\n drivers/net/pfe/pfe_ethdev.c              | 16 ++++++----\n drivers/net/qede/qede_ethdev.c            | 15 ++++++---\n drivers/net/ring/rte_eth_ring.c           |  8 +++--\n drivers/net/sfc/sfc_ethdev.c              |  4 ++-\n drivers/net/softnic/rte_eth_softnic.c     |  4 ++-\n drivers/net/szedata2/rte_eth_szedata2.c   | 24 ++++++++++-----\n drivers/net/tap/rte_eth_tap.c             |  4 ++-\n drivers/net/thunderx/nicvf_ethdev.c       |  6 ++--\n drivers/net/vhost/rte_eth_vhost.c         | 10 +++---\n drivers/net/virtio/virtio_ethdev.c        | 11 ++++---\n drivers/net/vmxnet3/vmxnet3_ethdev.c      | 13 +++++---\n lib/librte_ethdev/rte_ethdev.c            |  7 +++--\n lib/librte_ethdev/rte_ethdev_driver.h     |  2 +-\n lib/librte_ethdev/rte_ethdev_trace.h      |  3 +-\n 69 files changed, 417 insertions(+), 218 deletions(-)",
    "diff": "diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c\nindex 4bd4d1c9ad..2c24c9b3f5 100644\n--- a/app/test/virtual_pmd.c\n+++ b/app/test/virtual_pmd.c\n@@ -48,7 +48,7 @@ virtual_ethdev_start_fail(struct rte_eth_dev *eth_dev __rte_unused)\n \n \treturn -1;\n }\n-static void  virtual_ethdev_stop(struct rte_eth_dev *eth_dev __rte_unused)\n+static int  virtual_ethdev_stop(struct rte_eth_dev *eth_dev __rte_unused)\n {\n \tvoid *pkt = NULL;\n \tstruct virtual_ethdev_private *prv = eth_dev->data->dev_private;\n@@ -60,6 +60,8 @@ static void  virtual_ethdev_stop(struct rte_eth_dev *eth_dev __rte_unused)\n \n \twhile (rte_ring_dequeue(prv->tx_queue, &pkt) != -ENOENT)\n \t\trte_pktmbuf_free(pkt);\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c\nindex 25876224f8..cb1c39b027 100644\n--- a/drivers/net/af_packet/rte_eth_af_packet.c\n+++ b/drivers/net/af_packet/rte_eth_af_packet.c\n@@ -272,7 +272,7 @@ eth_dev_start(struct rte_eth_dev *dev)\n /*\n  * This function gets called when the current port gets stopped.\n  */\n-static void\n+static int\n eth_dev_stop(struct rte_eth_dev *dev)\n {\n \tunsigned i;\n@@ -296,6 +296,7 @@ eth_dev_stop(struct rte_eth_dev *dev)\n \t}\n \n \tdev->data->dev_link.link_status = ETH_LINK_DOWN;\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c\nindex 0562e58696..1c1e3cadd6 100644\n--- a/drivers/net/af_xdp/rte_eth_af_xdp.c\n+++ b/drivers/net/af_xdp/rte_eth_af_xdp.c\n@@ -599,10 +599,11 @@ eth_dev_start(struct rte_eth_dev *dev)\n }\n \n /* This function gets called when the current port gets stopped. */\n-static void\n+static int\n eth_dev_stop(struct rte_eth_dev *dev)\n {\n \tdev->data->dev_link.link_status = ETH_LINK_DOWN;\n+\treturn 0;\n }\n \n /* Find ethdev in list */\ndiff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c\nindex e3b1347769..f86a87fb47 100644\n--- a/drivers/net/ark/ark_ethdev.c\n+++ b/drivers/net/ark/ark_ethdev.c\n@@ -29,7 +29,7 @@ static int ark_config_device(struct rte_eth_dev *dev);\n static int eth_ark_dev_uninit(struct rte_eth_dev *eth_dev);\n static int eth_ark_dev_configure(struct rte_eth_dev *dev);\n static int eth_ark_dev_start(struct rte_eth_dev *dev);\n-static void eth_ark_dev_stop(struct rte_eth_dev *dev);\n+static int eth_ark_dev_stop(struct rte_eth_dev *dev);\n static int eth_ark_dev_close(struct rte_eth_dev *dev);\n static int eth_ark_dev_info_get(struct rte_eth_dev *dev,\n \t\t\t\tstruct rte_eth_dev_info *dev_info);\n@@ -584,7 +584,7 @@ eth_ark_dev_start(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-static void\n+static int\n eth_ark_dev_stop(struct rte_eth_dev *dev)\n {\n \tuint16_t i;\n@@ -593,7 +593,7 @@ eth_ark_dev_stop(struct rte_eth_dev *dev)\n \tstruct ark_mpu_t *mpu;\n \n \tif (ark->started == 0)\n-\t\treturn;\n+\t\treturn 0;\n \tark->started = 0;\n \n \t/* Stop the extension first */\n@@ -672,6 +672,8 @@ eth_ark_dev_stop(struct rte_eth_dev *dev)\n \t\tark_pktchkr_dump_stats(ark->pc);\n \t\tark_pktchkr_stop(ark->pc);\n \t}\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c\nindex 2217511ca0..310d8fe79c 100644\n--- a/drivers/net/atlantic/atl_ethdev.c\n+++ b/drivers/net/atlantic/atl_ethdev.c\n@@ -17,7 +17,7 @@\n static int eth_atl_dev_init(struct rte_eth_dev *eth_dev);\n static int  atl_dev_configure(struct rte_eth_dev *dev);\n static int  atl_dev_start(struct rte_eth_dev *dev);\n-static void atl_dev_stop(struct rte_eth_dev *dev);\n+static int atl_dev_stop(struct rte_eth_dev *dev);\n static int  atl_dev_set_link_up(struct rte_eth_dev *dev);\n static int  atl_dev_set_link_down(struct rte_eth_dev *dev);\n static int  atl_dev_close(struct rte_eth_dev *dev);\n@@ -599,7 +599,7 @@ atl_dev_start(struct rte_eth_dev *dev)\n /*\n  * Stop device: disable rx and tx functions to allow for reconfiguring.\n  */\n-static void\n+static int\n atl_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct rte_eth_link link;\n@@ -639,6 +639,8 @@ atl_dev_stop(struct rte_eth_dev *dev)\n \t\trte_free(intr_handle->intr_vec);\n \t\tintr_handle->intr_vec = NULL;\n \t}\n+\n+\treturn 0;\n }\n \n /*\n@@ -689,6 +691,7 @@ atl_dev_close(struct rte_eth_dev *dev)\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n \tstruct aq_hw_s *hw;\n+\tint ret;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -697,7 +700,7 @@ atl_dev_close(struct rte_eth_dev *dev)\n \n \thw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \n-\tatl_dev_stop(dev);\n+\tret = atl_dev_stop(dev);\n \n \tatl_free_queues(dev);\n \n@@ -712,7 +715,7 @@ atl_dev_close(struct rte_eth_dev *dev)\n \n \tpthread_mutex_destroy(&hw->mbox_mutex);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\ndiff --git a/drivers/net/avp/avp_ethdev.c b/drivers/net/avp/avp_ethdev.c\nindex 95fdb57451..67f16623c5 100644\n--- a/drivers/net/avp/avp_ethdev.c\n+++ b/drivers/net/avp/avp_ethdev.c\n@@ -37,7 +37,7 @@ static int avp_dev_create(struct rte_pci_device *pci_dev,\n \n static int avp_dev_configure(struct rte_eth_dev *dev);\n static int avp_dev_start(struct rte_eth_dev *dev);\n-static void avp_dev_stop(struct rte_eth_dev *dev);\n+static int avp_dev_stop(struct rte_eth_dev *dev);\n static int avp_dev_close(struct rte_eth_dev *dev);\n static int avp_dev_info_get(struct rte_eth_dev *dev,\n \t\t\t    struct rte_eth_dev_info *dev_info);\n@@ -2075,7 +2075,7 @@ avp_dev_start(struct rte_eth_dev *eth_dev)\n \treturn ret;\n }\n \n-static void\n+static int\n avp_dev_stop(struct rte_eth_dev *eth_dev)\n {\n \tstruct avp_dev *avp = AVP_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private);\n@@ -2084,6 +2084,7 @@ avp_dev_stop(struct rte_eth_dev *eth_dev)\n \trte_spinlock_lock(&avp->lock);\n \tif (avp->flags & AVP_F_DETACHED) {\n \t\tPMD_DRV_LOG(ERR, \"Operation not supported during VM live migration\\n\");\n+\t\tret = -ENOTSUP;\n \t\tgoto unlock;\n \t}\n \n@@ -2099,6 +2100,7 @@ avp_dev_stop(struct rte_eth_dev *eth_dev)\n \n unlock:\n \trte_spinlock_unlock(&avp->lock);\n+\treturn ret;\n }\n \n static int\ndiff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c\nindex cf085487cc..ce30a4f22c 100644\n--- a/drivers/net/axgbe/axgbe_ethdev.c\n+++ b/drivers/net/axgbe/axgbe_ethdev.c\n@@ -13,7 +13,7 @@\n static int eth_axgbe_dev_init(struct rte_eth_dev *eth_dev);\n static int  axgbe_dev_configure(struct rte_eth_dev *dev);\n static int  axgbe_dev_start(struct rte_eth_dev *dev);\n-static void axgbe_dev_stop(struct rte_eth_dev *dev);\n+static int  axgbe_dev_stop(struct rte_eth_dev *dev);\n static void axgbe_dev_interrupt_handler(void *param);\n static int axgbe_dev_close(struct rte_eth_dev *dev);\n static int axgbe_dev_promiscuous_enable(struct rte_eth_dev *dev);\n@@ -386,7 +386,7 @@ axgbe_dev_start(struct rte_eth_dev *dev)\n }\n \n /* Stop device: disable rx and tx functions to allow for reconfiguring. */\n-static void\n+static int\n axgbe_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct axgbe_port *pdata = dev->data->dev_private;\n@@ -396,7 +396,7 @@ axgbe_dev_stop(struct rte_eth_dev *dev)\n \trte_intr_disable(&pdata->pci_dev->intr_handle);\n \n \tif (rte_bit_relaxed_get32(AXGBE_STOPPED, &pdata->dev_state))\n-\t\treturn;\n+\t\treturn 0;\n \n \trte_bit_relaxed_set32(AXGBE_STOPPED, &pdata->dev_state);\n \taxgbe_dev_disable_tx(dev);\n@@ -406,6 +406,8 @@ axgbe_dev_stop(struct rte_eth_dev *dev)\n \tpdata->hw_if.exit(pdata);\n \tmemset(&dev->data->dev_link, 0, sizeof(struct rte_eth_link));\n \trte_bit_relaxed_set32(AXGBE_DOWN, &pdata->dev_state);\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c\nindex ce9df87489..28f8aaeb4d 100644\n--- a/drivers/net/bnx2x/bnx2x_ethdev.c\n+++ b/drivers/net/bnx2x/bnx2x_ethdev.c\n@@ -251,7 +251,7 @@ bnx2x_dev_start(struct rte_eth_dev *dev)\n \treturn ret;\n }\n \n-static void\n+static int\n bnx2x_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct bnx2x_softc *sc = dev->data->dev_private;\n@@ -278,10 +278,10 @@ bnx2x_dev_stop(struct rte_eth_dev *dev)\n \tret = bnx2x_nic_unload(sc, UNLOAD_NORMAL, FALSE);\n \tif (ret) {\n \t\tPMD_DRV_LOG(DEBUG, sc, \"bnx2x_nic_unload failed (%d)\", ret);\n-\t\treturn;\n+\t\treturn ret;\n \t}\n \n-\treturn;\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex b4654ec6af..1fa7b0c2d9 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -1345,12 +1345,13 @@ static void bnxt_free_switch_domain(struct bnxt *bp)\n }\n \n /* Unload the driver, release resources */\n-static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)\n+static int bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)\n {\n \tstruct bnxt *bp = eth_dev->data->dev_private;\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n \tstruct rte_eth_link link;\n+\tint ret;\n \n \teth_dev->data->dev_started = 0;\n \teth_dev->data->scattered_rx = 0;\n@@ -1365,7 +1366,9 @@ static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)\n \trte_intr_disable(intr_handle);\n \n \t/* Stop the child representors for this device */\n-\tbnxt_rep_stop_all(bp);\n+\tret = bnxt_rep_stop_all(bp);\n+\tif (ret != 0)\n+\t\treturn ret;\n \n \t/* delete the bnxt ULP port details */\n \tbnxt_ulp_port_deinit(bp);\n@@ -1406,11 +1409,14 @@ static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)\n \t/* All filters are deleted on a port stop. */\n \tif (BNXT_FLOW_XSTATS_EN(bp))\n \t\tbp->flow_stat->flow_count = 0;\n+\n+\treturn 0;\n }\n \n static int bnxt_dev_close_op(struct rte_eth_dev *eth_dev)\n {\n \tstruct bnxt *bp = eth_dev->data->dev_private;\n+\tint ret = 0;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n@@ -1421,7 +1427,7 @@ static int bnxt_dev_close_op(struct rte_eth_dev *eth_dev)\n \tbnxt_cancel_fc_thread(bp);\n \n \tif (eth_dev->data->dev_started)\n-\t\tbnxt_dev_stop_op(eth_dev);\n+\t\tret = bnxt_dev_stop_op(eth_dev);\n \n \tbnxt_free_switch_domain(bp);\n \n@@ -1447,7 +1453,7 @@ static int bnxt_dev_close_op(struct rte_eth_dev *eth_dev)\n \trte_free(bp->grp_info);\n \tbp->grp_info = NULL;\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static void bnxt_mac_addr_remove_op(struct rte_eth_dev *eth_dev,\ndiff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c\nindex 74a76fce57..fb171245df 100644\n--- a/drivers/net/bnxt/bnxt_reps.c\n+++ b/drivers/net/bnxt/bnxt_reps.c\n@@ -476,7 +476,7 @@ static int bnxt_vfr_free(struct bnxt_representor *vfr)\n \treturn rc;\n }\n \n-void bnxt_rep_dev_stop_op(struct rte_eth_dev *eth_dev)\n+int bnxt_rep_dev_stop_op(struct rte_eth_dev *eth_dev)\n {\n \tstruct bnxt_representor *vfr_bp = eth_dev->data->dev_private;\n \n@@ -492,6 +492,8 @@ void bnxt_rep_dev_stop_op(struct rte_eth_dev *eth_dev)\n \t\teth_dev->data->dev_link.link_status = 0;\n \n \tbnxt_rep_free_rx_mbufs(vfr_bp);\n+\n+\treturn 0;\n }\n \n int bnxt_rep_dev_close_op(struct rte_eth_dev *eth_dev)\n@@ -808,19 +810,24 @@ int bnxt_rep_stats_reset_op(struct rte_eth_dev *eth_dev)\n \treturn 0;\n }\n \n-void bnxt_rep_stop_all(struct bnxt *bp)\n+int bnxt_rep_stop_all(struct bnxt *bp)\n {\n \tuint16_t vf_id;\n \tstruct rte_eth_dev *rep_eth_dev;\n+\tint ret;\n \n \t/* No vfrep ports just exit */\n \tif (!bp->rep_info)\n-\t\treturn;\n+\t\treturn 0;\n \n \tfor (vf_id = 0; vf_id < BNXT_MAX_VF_REPS; vf_id++) {\n \t\trep_eth_dev = bp->rep_info[vf_id].vfr_eth_dev;\n \t\tif (!rep_eth_dev)\n \t\t\tcontinue;\n-\t\tbnxt_rep_dev_stop_op(rep_eth_dev);\n+\t\tret = bnxt_rep_dev_stop_op(rep_eth_dev);\n+\t\tif (ret != 0)\n+\t\t\treturn ret;\n \t}\n+\n+\treturn 0;\n }\ndiff --git a/drivers/net/bnxt/bnxt_reps.h b/drivers/net/bnxt/bnxt_reps.h\nindex a019530094..916769ca67 100644\n--- a/drivers/net/bnxt/bnxt_reps.h\n+++ b/drivers/net/bnxt/bnxt_reps.h\n@@ -44,10 +44,10 @@ int bnxt_rep_tx_queue_setup_op(struct rte_eth_dev *eth_dev,\n \t\t\t\t  tx_conf);\n void bnxt_rep_rx_queue_release_op(void *rx_queue);\n void bnxt_rep_tx_queue_release_op(void *tx_queue);\n-void bnxt_rep_dev_stop_op(struct rte_eth_dev *eth_dev);\n+int  bnxt_rep_dev_stop_op(struct rte_eth_dev *eth_dev);\n int bnxt_rep_dev_close_op(struct rte_eth_dev *eth_dev);\n int bnxt_rep_stats_get_op(struct rte_eth_dev *eth_dev,\n \t\t\t     struct rte_eth_stats *stats);\n int bnxt_rep_stats_reset_op(struct rte_eth_dev *eth_dev);\n-void bnxt_rep_stop_all(struct bnxt *bp);\n+int bnxt_rep_stop_all(struct bnxt *bp);\n #endif /* _BNXT_REPS_H_ */\ndiff --git a/drivers/net/bonding/eth_bond_private.h b/drivers/net/bonding/eth_bond_private.h\nindex 62e3a9dbf3..8f198bd50e 100644\n--- a/drivers/net/bonding/eth_bond_private.h\n+++ b/drivers/net/bonding/eth_bond_private.h\n@@ -316,7 +316,7 @@ bond_tlb_enable(struct bond_dev_private *internals);\n void\n bond_tlb_activate_slave(struct bond_dev_private *internals);\n \n-void\n+int\n bond_ethdev_stop(struct rte_eth_dev *eth_dev);\n \n int\ndiff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c\nindex b75646117c..8ae017cd42 100644\n--- a/drivers/net/bonding/rte_eth_bond_pmd.c\n+++ b/drivers/net/bonding/rte_eth_bond_pmd.c\n@@ -2049,11 +2049,12 @@ bond_ethdev_free_queues(struct rte_eth_dev *dev)\n \t}\n }\n \n-void\n+int\n bond_ethdev_stop(struct rte_eth_dev *eth_dev)\n {\n \tstruct bond_dev_private *internals = eth_dev->data->dev_private;\n \tuint16_t i;\n+\tint ret;\n \n \tif (internals->mode == BONDING_MODE_8023AD) {\n \t\tstruct port *port;\n@@ -2092,10 +2093,17 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev)\n \t\t\t\tinternals->active_slave_count, slave_id) !=\n \t\t\t\t\t\tinternals->active_slave_count) {\n \t\t\tinternals->slaves[i].last_link_status = 0;\n-\t\t\trte_eth_dev_stop(slave_id);\n+\t\t\tret = rte_eth_dev_stop(slave_id);\n+\t\t\tif (ret != 0) {\n+\t\t\t\tRTE_BOND_LOG(ERR, \"Failed to stop device on port %u\",\n+\t\t\t\t\t     slave_id);\n+\t\t\t\treturn ret;\n+\t\t\t}\n \t\t\tdeactivate_slave(eth_dev, slave_id);\n \t\t}\n \t}\n+\n+\treturn 0;\n }\n \n int\n@@ -3428,6 +3436,7 @@ bond_remove(struct rte_vdev_device *dev)\n \tstruct rte_eth_dev *eth_dev;\n \tstruct bond_dev_private *internals;\n \tconst char *name;\n+\tint ret = 0;\n \n \tif (!dev)\n \t\treturn -EINVAL;\n@@ -3450,12 +3459,12 @@ bond_remove(struct rte_vdev_device *dev)\n \t\treturn -EBUSY;\n \n \tif (eth_dev->data->dev_started == 1) {\n-\t\tbond_ethdev_stop(eth_dev);\n+\t\tret = bond_ethdev_stop(eth_dev);\n \t\tbond_ethdev_close(eth_dev);\n \t}\n \trte_eth_dev_release_port(eth_dev);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n /* this part will resolve the slave portids after all the other pdev and vdev\ndiff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c\nindex 16beb2d435..29c061e505 100644\n--- a/drivers/net/cxgbe/cxgbe_ethdev.c\n+++ b/drivers/net/cxgbe/cxgbe_ethdev.c\n@@ -416,7 +416,7 @@ int cxgbe_dev_start(struct rte_eth_dev *eth_dev)\n /*\n  * Stop device: disable rx and tx functions to allow for reconfiguring.\n  */\n-void cxgbe_dev_stop(struct rte_eth_dev *eth_dev)\n+int cxgbe_dev_stop(struct rte_eth_dev *eth_dev)\n {\n \tstruct port_info *pi = eth_dev->data->dev_private;\n \tstruct adapter *adapter = pi->adapter;\n@@ -424,7 +424,7 @@ void cxgbe_dev_stop(struct rte_eth_dev *eth_dev)\n \tCXGBE_FUNC_TRACE();\n \n \tif (!(adapter->flags & FULL_INIT_DONE))\n-\t\treturn;\n+\t\treturn 0;\n \n \tcxgbe_down(pi);\n \n@@ -434,6 +434,8 @@ void cxgbe_dev_stop(struct rte_eth_dev *eth_dev)\n \t */\n \tt4_sge_eth_clear_queues(pi);\n \teth_dev->data->scattered_rx = 0;\n+\n+\treturn 0;\n }\n \n int cxgbe_dev_configure(struct rte_eth_dev *eth_dev)\ndiff --git a/drivers/net/cxgbe/cxgbe_pfvf.h b/drivers/net/cxgbe/cxgbe_pfvf.h\nindex 69d91639e9..801d6995d1 100644\n--- a/drivers/net/cxgbe/cxgbe_pfvf.h\n+++ b/drivers/net/cxgbe/cxgbe_pfvf.h\n@@ -18,7 +18,7 @@\n \n void cxgbe_dev_rx_queue_release(void *q);\n void cxgbe_dev_tx_queue_release(void *q);\n-void cxgbe_dev_stop(struct rte_eth_dev *eth_dev);\n+int cxgbe_dev_stop(struct rte_eth_dev *eth_dev);\n int cxgbe_dev_close(struct rte_eth_dev *eth_dev);\n int cxgbe_dev_info_get(struct rte_eth_dev *eth_dev,\n \t\t       struct rte_eth_dev_info *device_info);\ndiff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c\nindex af47c196ae..4a4570a8d7 100644\n--- a/drivers/net/dpaa/dpaa_ethdev.c\n+++ b/drivers/net/dpaa/dpaa_ethdev.c\n@@ -415,7 +415,7 @@ static int dpaa_eth_dev_start(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-static void dpaa_eth_dev_stop(struct rte_eth_dev *dev)\n+static int dpaa_eth_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct fman_if *fif = dev->process_private;\n \n@@ -424,6 +424,8 @@ static void dpaa_eth_dev_stop(struct rte_eth_dev *dev)\n \tif (!fif->is_shared_mac)\n \t\tfman_if_disable_rx(fif);\n \tdev->tx_pkt_burst = dpaa_eth_tx_drop_all;\n+\n+\treturn 0;\n }\n \n static int dpaa_eth_dev_close(struct rte_eth_dev *dev)\n@@ -436,6 +438,7 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev)\n \tstruct rte_eth_link *link = &dev->data->dev_link;\n \tstruct dpaa_if *dpaa_intf = dev->data->dev_private;\n \tint loop;\n+\tint ret;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -457,7 +460,7 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev)\n \tintr_handle = &dpaa_dev->intr_handle;\n \t__fif = container_of(fif, struct __fman_if, __if);\n \n-\tdpaa_eth_dev_stop(dev);\n+\tret = dpaa_eth_dev_stop(dev);\n \n \t/* Reset link to autoneg */\n \tif (link->link_status && !link->link_autoneg)\n@@ -507,7 +510,7 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev)\n \tdev->rx_pkt_burst = NULL;\n \tdev->tx_pkt_burst = NULL;\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\n@@ -1293,7 +1296,7 @@ static int dpaa_link_down(struct rte_eth_dev *dev)\n \tif (dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC)\n \t\tdpaa_update_link_status(__fif->node_name, ETH_LINK_DOWN);\n \telse\n-\t\tdpaa_eth_dev_stop(dev);\n+\t\treturn dpaa_eth_dev_stop(dev);\n \treturn 0;\n }\n \ndiff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c\nindex d8624514df..3a17d54e2e 100644\n--- a/drivers/net/dpaa2/dpaa2_ethdev.c\n+++ b/drivers/net/dpaa2/dpaa2_ethdev.c\n@@ -1195,7 +1195,7 @@ dpaa2_dev_start(struct rte_eth_dev *dev)\n  *  This routine disables all traffic on the adapter by issuing a\n  *  global reset on the MAC.\n  */\n-static void\n+static int\n dpaa2_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct dpaa2_dev_priv *priv = dev->data->dev_private;\n@@ -1227,12 +1227,14 @@ dpaa2_dev_stop(struct rte_eth_dev *dev)\n \tif (ret) {\n \t\tDPAA2_PMD_ERR(\"Failure (ret %d) in disabling dpni %d dev\",\n \t\t\t      ret, priv->hw_id);\n-\t\treturn;\n+\t\treturn ret;\n \t}\n \n \t/* clear the recorded link status */\n \tmemset(&link, 0, sizeof(link));\n \trte_eth_linkstatus_set(dev, &link);\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c\nindex d050eb478a..fe567cc3d6 100644\n--- a/drivers/net/e1000/em_ethdev.c\n+++ b/drivers/net/e1000/em_ethdev.c\n@@ -33,7 +33,7 @@\n \n static int eth_em_configure(struct rte_eth_dev *dev);\n static int eth_em_start(struct rte_eth_dev *dev);\n-static void eth_em_stop(struct rte_eth_dev *dev);\n+static int eth_em_stop(struct rte_eth_dev *dev);\n static int eth_em_close(struct rte_eth_dev *dev);\n static int eth_em_promiscuous_enable(struct rte_eth_dev *dev);\n static int eth_em_promiscuous_disable(struct rte_eth_dev *dev);\n@@ -533,7 +533,9 @@ eth_em_start(struct rte_eth_dev *dev)\n \n \tPMD_INIT_FUNC_TRACE();\n \n-\teth_em_stop(dev);\n+\tret = eth_em_stop(dev);\n+\tif (ret != 0)\n+\t\treturn ret;\n \n \te1000_power_up_phy(hw);\n \n@@ -709,7 +711,7 @@ eth_em_start(struct rte_eth_dev *dev)\n  *  global reset on the MAC.\n  *\n  **********************************************************************/\n-static void\n+static int\n eth_em_stop(struct rte_eth_dev *dev)\n {\n \tstruct rte_eth_link link;\n@@ -751,6 +753,8 @@ eth_em_stop(struct rte_eth_dev *dev)\n \t\trte_free(intr_handle->intr_vec);\n \t\tintr_handle->intr_vec = NULL;\n \t}\n+\n+\treturn 0;\n }\n \n static int\n@@ -761,11 +765,12 @@ eth_em_close(struct rte_eth_dev *dev)\n \t\tE1000_DEV_PRIVATE(dev->data->dev_private);\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n+\tint ret;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\teth_em_stop(dev);\n+\tret = eth_em_stop(dev);\n \tadapter->stopped = 1;\n \tem_dev_free_queues(dev);\n \te1000_phy_hw_reset(hw);\n@@ -781,7 +786,7 @@ eth_em_close(struct rte_eth_dev *dev)\n \trte_intr_callback_unregister(intr_handle,\n \t\t\t\t     eth_em_interrupt_handler, dev);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\ndiff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c\nindex cb3d97e2a3..33cda52e08 100644\n--- a/drivers/net/e1000/igb_ethdev.c\n+++ b/drivers/net/e1000/igb_ethdev.c\n@@ -74,7 +74,7 @@\n \n static int  eth_igb_configure(struct rte_eth_dev *dev);\n static int  eth_igb_start(struct rte_eth_dev *dev);\n-static void eth_igb_stop(struct rte_eth_dev *dev);\n+static int  eth_igb_stop(struct rte_eth_dev *dev);\n static int  eth_igb_dev_set_link_up(struct rte_eth_dev *dev);\n static int  eth_igb_dev_set_link_down(struct rte_eth_dev *dev);\n static int eth_igb_close(struct rte_eth_dev *dev);\n@@ -154,7 +154,7 @@ static int eth_igb_default_mac_addr_set(struct rte_eth_dev *dev,\n static void igbvf_intr_disable(struct e1000_hw *hw);\n static int igbvf_dev_configure(struct rte_eth_dev *dev);\n static int igbvf_dev_start(struct rte_eth_dev *dev);\n-static void igbvf_dev_stop(struct rte_eth_dev *dev);\n+static int igbvf_dev_stop(struct rte_eth_dev *dev);\n static int igbvf_dev_close(struct rte_eth_dev *dev);\n static int igbvf_promiscuous_enable(struct rte_eth_dev *dev);\n static int igbvf_promiscuous_disable(struct rte_eth_dev *dev);\n@@ -1441,7 +1441,7 @@ eth_igb_start(struct rte_eth_dev *dev)\n  *  global reset on the MAC.\n  *\n  **********************************************************************/\n-static void\n+static int\n eth_igb_stop(struct rte_eth_dev *dev)\n {\n \tstruct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n@@ -1452,7 +1452,7 @@ eth_igb_stop(struct rte_eth_dev *dev)\n \t\tE1000_DEV_PRIVATE(dev->data->dev_private);\n \n \tif (adapter->stopped)\n-\t\treturn;\n+\t\treturn 0;\n \n \teth_igb_rxtx_control(dev, false);\n \n@@ -1497,6 +1497,8 @@ eth_igb_stop(struct rte_eth_dev *dev)\n \t}\n \n \tadapter->stopped = true;\n+\n+\treturn 0;\n }\n \n static int\n@@ -1534,11 +1536,12 @@ eth_igb_close(struct rte_eth_dev *dev)\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n \tstruct e1000_filter_info *filter_info =\n \t\tE1000_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private);\n+\tint ret;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\teth_igb_stop(dev);\n+\tret = eth_igb_stop(dev);\n \n \te1000_phy_hw_reset(hw);\n \tigb_release_manageability(hw);\n@@ -1598,7 +1601,7 @@ eth_igb_close(struct rte_eth_dev *dev)\n \t/* clear all the filters list */\n \tigb_filterlist_flush(dev);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n /*\n@@ -3340,7 +3343,7 @@ igbvf_dev_start(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-static void\n+static int\n igbvf_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);\n@@ -3349,7 +3352,7 @@ igbvf_dev_stop(struct rte_eth_dev *dev)\n \t\tE1000_DEV_PRIVATE(dev->data->dev_private);\n \n \tif (adapter->stopped)\n-\t\treturn;\n+\t\treturn 0;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -3374,6 +3377,8 @@ igbvf_dev_stop(struct rte_eth_dev *dev)\n \t}\n \n \tadapter->stopped = true;\n+\n+\treturn 0;\n }\n \n static int\n@@ -3382,6 +3387,7 @@ igbvf_dev_close(struct rte_eth_dev *dev)\n \tstruct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \tstruct rte_ether_addr addr;\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);\n+\tint ret;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -3390,7 +3396,9 @@ igbvf_dev_close(struct rte_eth_dev *dev)\n \n \te1000_reset_hw(hw);\n \n-\tigbvf_dev_stop(dev);\n+\tret = igbvf_dev_stop(dev);\n+\tif (ret != 0)\n+\t\treturn ret;\n \n \tigb_dev_free_queues(dev);\n \ndiff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c\nindex d32fa43837..e8599a8e90 100644\n--- a/drivers/net/ena/ena_ethdev.c\n+++ b/drivers/net/ena/ena_ethdev.c\n@@ -198,7 +198,7 @@ static void ena_init_rings(struct ena_adapter *adapter,\n \t\t\t   bool disable_meta_caching);\n static int ena_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);\n static int ena_start(struct rte_eth_dev *dev);\n-static void ena_stop(struct rte_eth_dev *dev);\n+static int ena_stop(struct rte_eth_dev *dev);\n static int ena_close(struct rte_eth_dev *dev);\n static int ena_dev_reset(struct rte_eth_dev *dev);\n static int ena_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats);\n@@ -505,12 +505,13 @@ static int ena_close(struct rte_eth_dev *dev)\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n \tstruct ena_adapter *adapter = dev->data->dev_private;\n+\tint ret = 0;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n \tif (adapter->state == ENA_ADAPTER_STATE_RUNNING)\n-\t\tena_stop(dev);\n+\t\tret = ena_stop(dev);\n \tadapter->state = ENA_ADAPTER_STATE_CLOSED;\n \n \tena_rx_queue_release_all(dev);\n@@ -530,7 +531,7 @@ static int ena_close(struct rte_eth_dev *dev)\n \t */\n \tdev->data->mac_addrs = NULL;\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\n@@ -1100,7 +1101,7 @@ static int ena_start(struct rte_eth_dev *dev)\n \treturn rc;\n }\n \n-static void ena_stop(struct rte_eth_dev *dev)\n+static int ena_stop(struct rte_eth_dev *dev)\n {\n \tstruct ena_adapter *adapter = dev->data->dev_private;\n \tstruct ena_com_dev *ena_dev = &adapter->ena_dev;\n@@ -1118,6 +1119,8 @@ static void ena_stop(struct rte_eth_dev *dev)\n \n \t++adapter->dev_stats.dev_stop;\n \tadapter->state = ENA_ADAPTER_STATE_STOPPED;\n+\n+\treturn 0;\n }\n \n static int ena_create_io_queue(struct ena_ring *ring)\ndiff --git a/drivers/net/enetc/enetc_ethdev.c b/drivers/net/enetc/enetc_ethdev.c\nindex b3dec7e64d..50bb3f096b 100644\n--- a/drivers/net/enetc/enetc_ethdev.c\n+++ b/drivers/net/enetc/enetc_ethdev.c\n@@ -45,7 +45,7 @@ enetc_dev_start(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-static void\n+static int\n enetc_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct enetc_eth_hw *hw =\n@@ -61,6 +61,8 @@ enetc_dev_stop(struct rte_eth_dev *dev)\n \tval = enetc_port_rd(enetc_hw, ENETC_PM0_CMD_CFG);\n \tenetc_port_wr(enetc_hw, ENETC_PM0_CMD_CFG,\n \t\t      val & (~(ENETC_PM0_TX_EN | ENETC_PM0_RX_EN)));\n+\n+\treturn 0;\n }\n \n static const uint32_t *\n@@ -549,12 +551,13 @@ static int\n enetc_dev_close(struct rte_eth_dev *dev)\n {\n \tuint16_t i;\n+\tint ret;\n \n \tPMD_INIT_FUNC_TRACE();\n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\tenetc_dev_stop(dev);\n+\tret = enetc_dev_stop(dev);\n \n \tfor (i = 0; i < dev->data->nb_rx_queues; i++) {\n \t\tenetc_rx_queue_release(dev->data->rx_queues[i]);\n@@ -571,7 +574,7 @@ enetc_dev_close(struct rte_eth_dev *dev)\n \tif (rte_eal_iova_mode() == RTE_IOVA_PA)\n \t\tdpaax_iova_table_depopulate();\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\ndiff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c\nindex 60ee5e01de..4a34c0ef83 100644\n--- a/drivers/net/enic/enic_ethdev.c\n+++ b/drivers/net/enic/enic_ethdev.c\n@@ -428,19 +428,21 @@ static int enicpmd_dev_start(struct rte_eth_dev *eth_dev)\n /*\n  * Stop device: disable rx and tx functions to allow for reconfiguring.\n  */\n-static void enicpmd_dev_stop(struct rte_eth_dev *eth_dev)\n+static int enicpmd_dev_stop(struct rte_eth_dev *eth_dev)\n {\n \tstruct rte_eth_link link;\n \tstruct enic *enic = pmd_priv(eth_dev);\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n-\t\treturn;\n+\t\treturn 0;\n \n \tENICPMD_FUNC_TRACE();\n \tenic_disable(enic);\n \n \tmemset(&link, 0, sizeof(link));\n \trte_eth_linkstatus_set(eth_dev, &link);\n+\n+\treturn 0;\n }\n \n /*\ndiff --git a/drivers/net/enic/enic_vf_representor.c b/drivers/net/enic/enic_vf_representor.c\nindex 169c611a68..984a754e35 100644\n--- a/drivers/net/enic/enic_vf_representor.c\n+++ b/drivers/net/enic/enic_vf_representor.c\n@@ -242,7 +242,7 @@ static int enic_vf_dev_start(struct rte_eth_dev *eth_dev)\n \treturn 0;\n }\n \n-static void enic_vf_dev_stop(struct rte_eth_dev *eth_dev)\n+static int enic_vf_dev_stop(struct rte_eth_dev *eth_dev)\n {\n \tstruct enic_vf_representor *vf;\n \tstruct vnic_rq *rq;\n@@ -250,7 +250,7 @@ static void enic_vf_dev_stop(struct rte_eth_dev *eth_dev)\n \n \tENICPMD_FUNC_TRACE();\n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n-\t\treturn;\n+\t\treturn 0;\n \t/* Undo dev_start. Disable/clean WQ */\n \tvf = eth_dev->data->dev_private;\n \tpf = vf->pf;\n@@ -271,6 +271,8 @@ static void enic_vf_dev_stop(struct rte_eth_dev *eth_dev)\n \teth_dev->data->rx_queue_state[0] = RTE_ETH_QUEUE_STATE_STOPPED;\n \t/* Clean up representor flowman */\n \tenic_fm_destroy(&vf->enic);\n+\n+\treturn 0;\n }\n \n /*\ndiff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c\nindex 5bcc250b5e..70b18f6c0f 100644\n--- a/drivers/net/failsafe/failsafe_ops.c\n+++ b/drivers/net/failsafe/failsafe_ops.c\n@@ -179,22 +179,32 @@ fs_set_queues_state_stop(struct rte_eth_dev *dev)\n \t\t\t\t\t\tRTE_ETH_QUEUE_STATE_STOPPED;\n }\n \n-static void\n+static int\n fs_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct sub_device *sdev;\n \tuint8_t i;\n+\tint ret;\n \n \tfs_lock(dev, 0);\n \tPRIV(dev)->state = DEV_STARTED - 1;\n \tFOREACH_SUBDEV_STATE(sdev, i, dev, DEV_STARTED) {\n-\t\trte_eth_dev_stop(PORT_ID(sdev));\n+\t\tret = rte_eth_dev_stop(PORT_ID(sdev));\n+\t\tif (fs_err(sdev, ret) < 0) {\n+\t\t\tERROR(\"Failed to stop device %u\",\n+\t\t\t      PORT_ID(sdev));\n+\t\t\tPRIV(dev)->state = DEV_STARTED + 1;\n+\t\t\tfs_unlock(dev, 0);\n+\t\t\treturn ret;\n+\t\t}\n \t\tfailsafe_rx_intr_uninstall_subdevice(sdev);\n \t\tsdev->state = DEV_STARTED - 1;\n \t}\n \tfailsafe_rx_intr_uninstall(dev);\n \tfs_set_queues_state_stop(dev);\n \tfs_unlock(dev, 0);\n+\n+\treturn 0;\n }\n \n static int\n@@ -644,8 +654,13 @@ failsafe_eth_dev_close(struct rte_eth_dev *dev)\n \n \tfs_lock(dev, 0);\n \tfailsafe_hotplug_alarm_cancel(dev);\n-\tif (PRIV(dev)->state == DEV_STARTED)\n-\t\tdev->dev_ops->dev_stop(dev);\n+\tif (PRIV(dev)->state == DEV_STARTED) {\n+\t\tret = dev->dev_ops->dev_stop(dev);\n+\t\tif (ret != 0) {\n+\t\t\tfs_unlock(dev, 0);\n+\t\t\treturn ret;\n+\t\t}\n+\t}\n \tPRIV(dev)->state = DEV_ACTIVE - 1;\n \tFOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {\n \t\tDEBUG(\"Closing sub_device %d\", i);\ndiff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c\nindex c4a6fdf7f0..393e84f5a8 100644\n--- a/drivers/net/fm10k/fm10k_ethdev.c\n+++ b/drivers/net/fm10k/fm10k_ethdev.c\n@@ -1152,7 +1152,7 @@ fm10k_dev_start(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-static void\n+static int\n fm10k_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n@@ -1187,6 +1187,8 @@ fm10k_dev_stop(struct rte_eth_dev *dev)\n \trte_intr_efd_disable(intr_handle);\n \trte_free(intr_handle->intr_vec);\n \tintr_handle->intr_vec = NULL;\n+\n+\treturn 0;\n }\n \n static void\n@@ -2785,6 +2787,7 @@ fm10k_dev_close(struct rte_eth_dev *dev)\n \tstruct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \tstruct rte_pci_device *pdev = RTE_ETH_DEV_TO_PCI(dev);\n \tstruct rte_intr_handle *intr_handle = &pdev->intr_handle;\n+\tint ret;\n \n \tPMD_INIT_FUNC_TRACE();\n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n@@ -2800,7 +2803,9 @@ fm10k_dev_close(struct rte_eth_dev *dev)\n \n \t/* Stop mailbox service first */\n \tfm10k_close_mbx_service(hw);\n-\tfm10k_dev_stop(dev);\n+\n+\tret = fm10k_dev_stop(dev);\n+\n \tfm10k_dev_queue_release(dev);\n \tfm10k_stop_hw(hw);\n \n@@ -2827,7 +2832,7 @@ fm10k_dev_close(struct rte_eth_dev *dev)\n \t\t\tfm10k_dev_interrupt_handler_vf, (void *)dev);\n \t}\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static const struct eth_dev_ops fm10k_eth_dev_ops = {\ndiff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c\nindex 466c8362b9..aabf642cfd 100644\n--- a/drivers/net/hinic/hinic_pmd_ethdev.c\n+++ b/drivers/net/hinic/hinic_pmd_ethdev.c\n@@ -1177,7 +1177,7 @@ static void hinic_free_all_sq(struct hinic_nic_dev *nic_dev)\n  * @param dev\n  *   Pointer to Ethernet device structure.\n  */\n-static void hinic_dev_stop(struct rte_eth_dev *dev)\n+static int hinic_dev_stop(struct rte_eth_dev *dev)\n {\n \tint rc;\n \tchar *name;\n@@ -1192,7 +1192,7 @@ static void hinic_dev_stop(struct rte_eth_dev *dev)\n \tif (!rte_bit_relaxed_test_and_clear32(HINIC_DEV_START,\n \t\t\t\t\t      &nic_dev->dev_status)) {\n \t\tPMD_DRV_LOG(INFO, \"Device %s already stopped\", name);\n-\t\treturn;\n+\t\treturn 0;\n \t}\n \n \t/* just stop phy port and vport */\n@@ -1227,6 +1227,8 @@ static void hinic_dev_stop(struct rte_eth_dev *dev)\n \t/* free mbuf */\n \thinic_free_all_rx_mbuf(dev);\n \thinic_free_all_tx_mbuf(dev);\n+\n+\treturn 0;\n }\n \n static void hinic_disable_interrupt(struct rte_eth_dev *dev)\n@@ -2968,6 +2970,7 @@ static void hinic_nic_dev_destroy(struct rte_eth_dev *eth_dev)\n static int hinic_dev_close(struct rte_eth_dev *dev)\n {\n \tstruct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);\n+\tint ret;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n@@ -2980,7 +2983,7 @@ static int hinic_dev_close(struct rte_eth_dev *dev)\n \t}\n \n \t/* stop device first */\n-\thinic_dev_stop(dev);\n+\tret = hinic_dev_stop(dev);\n \n \t/* rx_cqe, rx_info */\n \thinic_free_all_rx_resources(dev);\n@@ -3004,7 +3007,7 @@ static int hinic_dev_close(struct rte_eth_dev *dev)\n \t/* deinit nic hardware device */\n \thinic_nic_dev_destroy(dev);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static const struct eth_dev_ops hinic_pmd_ops = {\ndiff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c\nindex ce5bae538d..3198d3fa3d 100644\n--- a/drivers/net/hns3/hns3_ethdev.c\n+++ b/drivers/net/hns3/hns3_ethdev.c\n@@ -4990,7 +4990,7 @@ hns3_unmap_rx_interrupt(struct rte_eth_dev *dev)\n \t}\n }\n \n-static void\n+static int\n hns3_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct hns3_adapter *hns = dev->data->dev_private;\n@@ -5017,6 +5017,8 @@ hns3_dev_stop(struct rte_eth_dev *dev)\n \thns3_rx_scattered_reset(dev);\n \trte_eal_alarm_cancel(hns3_service_handler, dev);\n \trte_spinlock_unlock(&hw->lock);\n+\n+\treturn 0;\n }\n \n static int\n@@ -5024,6 +5026,7 @@ hns3_dev_close(struct rte_eth_dev *eth_dev)\n {\n \tstruct hns3_adapter *hns = eth_dev->data->dev_private;\n \tstruct hns3_hw *hw = &hns->hw;\n+\tint ret = 0;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY) {\n \t\trte_free(eth_dev->process_private);\n@@ -5032,7 +5035,7 @@ hns3_dev_close(struct rte_eth_dev *eth_dev)\n \t}\n \n \tif (hw->adapter_state == HNS3_NIC_STARTED)\n-\t\thns3_dev_stop(eth_dev);\n+\t\tret = hns3_dev_stop(eth_dev);\n \n \thw->adapter_state = HNS3_NIC_CLOSING;\n \thns3_reset_abort(hns);\n@@ -5049,7 +5052,7 @@ hns3_dev_close(struct rte_eth_dev *eth_dev)\n \thns3_mp_uninit_primary();\n \thns3_warn(hw, \"Close port %d finished\", hw->data->port_id);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\ndiff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c\nindex 1a19c0e6e6..ef622cfcf6 100644\n--- a/drivers/net/hns3/hns3_ethdev_vf.c\n+++ b/drivers/net/hns3/hns3_ethdev_vf.c\n@@ -1945,7 +1945,7 @@ hns3vf_unmap_rx_interrupt(struct rte_eth_dev *dev)\n \t}\n }\n \n-static void\n+static int\n hns3vf_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct hns3_adapter *hns = dev->data->dev_private;\n@@ -1972,6 +1972,8 @@ hns3vf_dev_stop(struct rte_eth_dev *dev)\n \thns3_rx_scattered_reset(dev);\n \trte_eal_alarm_cancel(hns3vf_service_handler, dev);\n \trte_spinlock_unlock(&hw->lock);\n+\n+\treturn 0;\n }\n \n static int\n@@ -1979,12 +1981,13 @@ hns3vf_dev_close(struct rte_eth_dev *eth_dev)\n {\n \tstruct hns3_adapter *hns = eth_dev->data->dev_private;\n \tstruct hns3_hw *hw = &hns->hw;\n+\tint ret = 0;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n \tif (hw->adapter_state == HNS3_NIC_STARTED)\n-\t\thns3vf_dev_stop(eth_dev);\n+\t\tret = hns3vf_dev_stop(eth_dev);\n \n \thw->adapter_state = HNS3_NIC_CLOSING;\n \thns3_reset_abort(hns);\n@@ -2000,7 +2003,7 @@ hns3vf_dev_close(struct rte_eth_dev *eth_dev)\n \thns3_mp_uninit_primary();\n \thns3_warn(hw, \"Close port %d finished\", hw->data->port_id);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\ndiff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c\nindex 943cfe71dc..2f24b6640a 100644\n--- a/drivers/net/i40e/i40e_ethdev.c\n+++ b/drivers/net/i40e/i40e_ethdev.c\n@@ -224,7 +224,7 @@ static int eth_i40e_dev_init(struct rte_eth_dev *eth_dev, void *init_params);\n static int eth_i40e_dev_uninit(struct rte_eth_dev *eth_dev);\n static int i40e_dev_configure(struct rte_eth_dev *dev);\n static int i40e_dev_start(struct rte_eth_dev *dev);\n-static void i40e_dev_stop(struct rte_eth_dev *dev);\n+static int i40e_dev_stop(struct rte_eth_dev *dev);\n static int i40e_dev_close(struct rte_eth_dev *dev);\n static int  i40e_dev_reset(struct rte_eth_dev *dev);\n static int i40e_dev_promiscuous_enable(struct rte_eth_dev *dev);\n@@ -2542,7 +2542,7 @@ i40e_dev_start(struct rte_eth_dev *dev)\n \treturn ret;\n }\n \n-static void\n+static int\n i40e_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);\n@@ -2553,7 +2553,7 @@ i40e_dev_stop(struct rte_eth_dev *dev)\n \tint i;\n \n \tif (hw->adapter_stopped == 1)\n-\t\treturn;\n+\t\treturn 0;\n \n \tif (dev->data->dev_conf.intr_conf.rxq == 0) {\n \t\trte_eal_alarm_cancel(i40e_dev_alarm_handler, dev);\n@@ -2601,6 +2601,8 @@ i40e_dev_stop(struct rte_eth_dev *dev)\n \thw->adapter_stopped = 1;\n \n \tpf->adapter->rss_reta_updated = 0;\n+\n+\treturn 0;\n }\n \n static int\n@@ -2628,7 +2630,7 @@ i40e_dev_close(struct rte_eth_dev *dev)\n \t\tPMD_INIT_LOG(WARNING, \"failed to free switch domain: %d\", ret);\n \n \n-\ti40e_dev_stop(dev);\n+\tret = i40e_dev_stop(dev);\n \n \t/* Remove all mirror rules */\n \twhile ((p_mirror = TAILQ_FIRST(&pf->mirror_list))) {\n@@ -2745,7 +2747,7 @@ i40e_dev_close(struct rte_eth_dev *dev)\n \ti40e_tm_conf_uninit(dev);\n \n \thw->adapter_closed = 1;\n-\treturn 0;\n+\treturn ret;\n }\n \n /*\ndiff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c\nindex 4d6510d1ff..6845c43efb 100644\n--- a/drivers/net/i40e/i40e_ethdev_vf.c\n+++ b/drivers/net/i40e/i40e_ethdev_vf.c\n@@ -74,7 +74,7 @@ enum i40evf_aq_result {\n \n static int i40evf_dev_configure(struct rte_eth_dev *dev);\n static int i40evf_dev_start(struct rte_eth_dev *dev);\n-static void i40evf_dev_stop(struct rte_eth_dev *dev);\n+static int i40evf_dev_stop(struct rte_eth_dev *dev);\n static int i40evf_dev_info_get(struct rte_eth_dev *dev,\n \t\t\t       struct rte_eth_dev_info *dev_info);\n static int i40evf_dev_link_update(struct rte_eth_dev *dev,\n@@ -2176,7 +2176,7 @@ i40evf_dev_start(struct rte_eth_dev *dev)\n \treturn -1;\n }\n \n-static void\n+static int\n i40evf_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);\n@@ -2190,7 +2190,7 @@ i40evf_dev_stop(struct rte_eth_dev *dev)\n \t\trte_intr_disable(intr_handle);\n \n \tif (hw->adapter_stopped == 1)\n-\t\treturn;\n+\t\treturn 0;\n \ti40evf_stop_queues(dev);\n \ti40evf_disable_queues_intr(dev);\n \ti40e_dev_clear_queues(dev);\n@@ -2208,6 +2208,7 @@ i40evf_dev_stop(struct rte_eth_dev *dev)\n \t\t\t\tFALSE);\n \thw->adapter_stopped = 1;\n \n+\treturn 0;\n }\n \n static int\n@@ -2401,11 +2402,13 @@ i40evf_dev_close(struct rte_eth_dev *dev)\n {\n \tstruct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \tstruct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);\n+\tint ret;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\ti40evf_dev_stop(dev);\n+\tret = i40evf_dev_stop(dev);\n+\n \ti40e_dev_free_queues(dev);\n \t/*\n \t * disable promiscuous mode before reset vf\n@@ -2431,7 +2434,7 @@ i40evf_dev_close(struct rte_eth_dev *dev)\n \tvf->aq_resp = NULL;\n \n \thw->adapter_closed = 1;\n-\treturn 0;\n+\treturn ret;\n }\n \n /*\ndiff --git a/drivers/net/i40e/i40e_vf_representor.c b/drivers/net/i40e/i40e_vf_representor.c\nindex f09d4d8798..791c050b8c 100644\n--- a/drivers/net/i40e/i40e_vf_representor.c\n+++ b/drivers/net/i40e/i40e_vf_representor.c\n@@ -118,9 +118,10 @@ i40e_vf_representor_dev_start(__rte_unused struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-static void\n+static int\n i40e_vf_representor_dev_stop(__rte_unused struct rte_eth_dev *dev)\n {\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c\nindex f5e6e852ae..b2e057df1e 100644\n--- a/drivers/net/iavf/iavf_ethdev.c\n+++ b/drivers/net/iavf/iavf_ethdev.c\n@@ -31,7 +31,7 @@\n \n static int iavf_dev_configure(struct rte_eth_dev *dev);\n static int iavf_dev_start(struct rte_eth_dev *dev);\n-static void iavf_dev_stop(struct rte_eth_dev *dev);\n+static int iavf_dev_stop(struct rte_eth_dev *dev);\n static int iavf_dev_close(struct rte_eth_dev *dev);\n static int iavf_dev_reset(struct rte_eth_dev *dev);\n static int iavf_dev_info_get(struct rte_eth_dev *dev,\n@@ -531,7 +531,7 @@ iavf_dev_start(struct rte_eth_dev *dev)\n \treturn -1;\n }\n \n-static void\n+static int\n iavf_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);\n@@ -542,7 +542,7 @@ iavf_dev_stop(struct rte_eth_dev *dev)\n \tPMD_INIT_FUNC_TRACE();\n \n \tif (adapter->stopped == 1)\n-\t\treturn;\n+\t\treturn 0;\n \n \tiavf_stop_queues(dev);\n \n@@ -562,6 +562,8 @@ iavf_dev_stop(struct rte_eth_dev *dev)\n \t\t\t\t  false);\n \n \tadapter->stopped = 1;\n+\n+\treturn 0;\n }\n \n static int\n@@ -1499,11 +1501,13 @@ iavf_dev_close(struct rte_eth_dev *dev)\n \tstruct iavf_adapter *adapter =\n \t\tIAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);\n \tstruct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);\n+\tint ret;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\tiavf_dev_stop(dev);\n+\tret = iavf_dev_stop(dev);\n+\n \tiavf_flow_flush(dev, NULL);\n \tiavf_flow_uninit(adapter);\n \n@@ -1548,7 +1552,7 @@ iavf_dev_close(struct rte_eth_dev *dev)\n \n \tvf->vf_reset = false;\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\ndiff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c\nindex 33dd0c44f2..047926dab2 100644\n--- a/drivers/net/ice/ice_dcf_ethdev.c\n+++ b/drivers/net/ice/ice_dcf_ethdev.c\n@@ -589,7 +589,7 @@ ice_dcf_stop_queues(struct rte_eth_dev *dev)\n \t}\n }\n \n-static void\n+static int\n ice_dcf_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct ice_dcf_adapter *dcf_ad = dev->data->dev_private;\n@@ -598,7 +598,7 @@ ice_dcf_dev_stop(struct rte_eth_dev *dev)\n \n \tif (ad->pf.adapter_stopped == 1) {\n \t\tPMD_DRV_LOG(DEBUG, \"Port is already stopped\");\n-\t\treturn;\n+\t\treturn 0;\n \t}\n \n \tice_dcf_stop_queues(dev);\n@@ -612,6 +612,8 @@ ice_dcf_dev_stop(struct rte_eth_dev *dev)\n \tice_dcf_add_del_all_mac_addr(&dcf_ad->real_hw, false);\n \tdev->data->dev_link.link_status = ETH_LINK_DOWN;\n \tad->pf.adapter_stopped = 1;\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c\nindex 0056da78a5..eafa94a5fb 100644\n--- a/drivers/net/ice/ice_ethdev.c\n+++ b/drivers/net/ice/ice_ethdev.c\n@@ -76,7 +76,7 @@ static struct proto_xtr_ol_flag ice_proto_xtr_ol_flag_params[] = {\n \n static int ice_dev_configure(struct rte_eth_dev *dev);\n static int ice_dev_start(struct rte_eth_dev *dev);\n-static void ice_dev_stop(struct rte_eth_dev *dev);\n+static int ice_dev_stop(struct rte_eth_dev *dev);\n static int ice_dev_close(struct rte_eth_dev *dev);\n static int ice_dev_reset(struct rte_eth_dev *dev);\n static int ice_dev_info_get(struct rte_eth_dev *dev,\n@@ -2331,7 +2331,7 @@ ice_vsi_disable_queues_intr(struct ice_vsi *vsi)\n \t\tICE_WRITE_REG(hw, GLINT_DYN_CTL(0), GLINT_DYN_CTL_WB_ON_ITR_M);\n }\n \n-static void\n+static int\n ice_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct rte_eth_dev_data *data = dev->data;\n@@ -2343,7 +2343,7 @@ ice_dev_stop(struct rte_eth_dev *dev)\n \n \t/* avoid stopping again */\n \tif (pf->adapter_stopped)\n-\t\treturn;\n+\t\treturn 0;\n \n \t/* stop and clear all Rx queues */\n \tfor (i = 0; i < data->nb_rx_queues; i++)\n@@ -2369,6 +2369,8 @@ ice_dev_stop(struct rte_eth_dev *dev)\n \t}\n \n \tpf->adapter_stopped = true;\n+\n+\treturn 0;\n }\n \n static int\n@@ -2380,6 +2382,7 @@ ice_dev_close(struct rte_eth_dev *dev)\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n \tstruct ice_adapter *ad =\n \t\tICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);\n+\tint ret;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n@@ -2391,7 +2394,7 @@ ice_dev_close(struct rte_eth_dev *dev)\n \t */\n \tice_pf_disable_irq0(hw);\n \n-\tice_dev_stop(dev);\n+\tret = ice_dev_stop(dev);\n \n \tif (!ad->is_safe_mode)\n \t\tice_flow_uninit(ad);\n@@ -2420,7 +2423,7 @@ ice_dev_close(struct rte_eth_dev *dev)\n \trte_intr_callback_unregister(intr_handle,\n \t\t\t\t     ice_interrupt_handler, dev);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\ndiff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c\nindex 7f5066df4b..085752b47e 100644\n--- a/drivers/net/igc/igc_ethdev.c\n+++ b/drivers/net/igc/igc_ethdev.c\n@@ -179,7 +179,7 @@ static const struct rte_igc_xstats_name_off rte_igc_stats_strings[] = {\n \n static int eth_igc_configure(struct rte_eth_dev *dev);\n static int eth_igc_link_update(struct rte_eth_dev *dev, int wait_to_complete);\n-static void eth_igc_stop(struct rte_eth_dev *dev);\n+static int eth_igc_stop(struct rte_eth_dev *dev);\n static int eth_igc_start(struct rte_eth_dev *dev);\n static int eth_igc_set_link_up(struct rte_eth_dev *dev);\n static int eth_igc_set_link_down(struct rte_eth_dev *dev);\n@@ -607,7 +607,7 @@ eth_igc_rxtx_control(struct rte_eth_dev *dev, bool enable)\n  *  This routine disables all traffic on the adapter by issuing a\n  *  global reset on the MAC.\n  */\n-static void\n+static int\n eth_igc_stop(struct rte_eth_dev *dev)\n {\n \tstruct igc_adapter *adapter = IGC_DEV_PRIVATE(dev);\n@@ -668,6 +668,8 @@ eth_igc_stop(struct rte_eth_dev *dev)\n \t\trte_free(intr_handle->intr_vec);\n \t\tintr_handle->intr_vec = NULL;\n \t}\n+\n+\treturn 0;\n }\n \n /*\n@@ -1173,13 +1175,14 @@ eth_igc_close(struct rte_eth_dev *dev)\n \tstruct igc_hw *hw = IGC_DEV_PRIVATE_HW(dev);\n \tstruct igc_adapter *adapter = IGC_DEV_PRIVATE(dev);\n \tint retry = 0;\n+\tint ret = 0;\n \n \tPMD_INIT_FUNC_TRACE();\n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n \tif (!adapter->stopped)\n-\t\teth_igc_stop(dev);\n+\t\tret = eth_igc_stop(dev);\n \n \tigc_flow_flush(dev, NULL);\n \tigc_clear_all_filter(dev);\n@@ -1202,7 +1205,7 @@ eth_igc_close(struct rte_eth_dev *dev)\n \t/* Reset any pending lock */\n \tigc_reset_swfw_lock(hw);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static void\ndiff --git a/drivers/net/ionic/ionic_ethdev.c b/drivers/net/ionic/ionic_ethdev.c\nindex ef7d06e526..23e785f6dd 100644\n--- a/drivers/net/ionic/ionic_ethdev.c\n+++ b/drivers/net/ionic/ionic_ethdev.c\n@@ -24,7 +24,7 @@ static int  ionic_dev_info_get(struct rte_eth_dev *eth_dev,\n static int  ionic_dev_configure(struct rte_eth_dev *dev);\n static int  ionic_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);\n static int  ionic_dev_start(struct rte_eth_dev *dev);\n-static void ionic_dev_stop(struct rte_eth_dev *dev);\n+static int  ionic_dev_stop(struct rte_eth_dev *dev);\n static int  ionic_dev_close(struct rte_eth_dev *dev);\n static int  ionic_dev_set_link_up(struct rte_eth_dev *dev);\n static int  ionic_dev_set_link_down(struct rte_eth_dev *dev);\n@@ -940,7 +940,7 @@ ionic_dev_start(struct rte_eth_dev *eth_dev)\n /*\n  * Stop device: disable rx and tx functions to allow for reconfiguring.\n  */\n-static void\n+static int\n ionic_dev_stop(struct rte_eth_dev *eth_dev)\n {\n \tstruct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev);\n@@ -951,6 +951,8 @@ ionic_dev_stop(struct rte_eth_dev *eth_dev)\n \terr = ionic_lif_stop(lif);\n \tif (err)\n \t\tIONIC_PRINT(ERR, \"Cannot stop LIF: %d\", err);\n+\n+\treturn err;\n }\n \n /*\ndiff --git a/drivers/net/ipn3ke/ipn3ke_representor.c b/drivers/net/ipn3ke/ipn3ke_representor.c\nindex b9fb4d4e46..f15ee0728a 100644\n--- a/drivers/net/ipn3ke/ipn3ke_representor.c\n+++ b/drivers/net/ipn3ke/ipn3ke_representor.c\n@@ -193,7 +193,7 @@ ipn3ke_rpst_dev_start(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-static void\n+static int\n ipn3ke_rpst_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct ipn3ke_hw *hw = IPN3KE_DEV_PRIVATE_TO_HW(dev);\n@@ -206,6 +206,8 @@ ipn3ke_rpst_dev_stop(struct rte_eth_dev *dev)\n \t\t/* Disable the RX path */\n \t\tipn3ke_xmac_rx_disable(hw, rpst->port_id, 0);\n \t}\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c\nindex 0b98e210e7..074b40255c 100644\n--- a/drivers/net/ixgbe/ixgbe_ethdev.c\n+++ b/drivers/net/ixgbe/ixgbe_ethdev.c\n@@ -142,13 +142,13 @@ static int ixgbe_fdir_filter_uninit(struct rte_eth_dev *eth_dev);\n static int ixgbe_l2_tn_filter_init(struct rte_eth_dev *eth_dev);\n static int ixgbe_l2_tn_filter_uninit(struct rte_eth_dev *eth_dev);\n static int ixgbe_ntuple_filter_uninit(struct rte_eth_dev *eth_dev);\n-static int  ixgbe_dev_configure(struct rte_eth_dev *dev);\n-static int  ixgbe_dev_start(struct rte_eth_dev *dev);\n-static void ixgbe_dev_stop(struct rte_eth_dev *dev);\n-static int  ixgbe_dev_set_link_up(struct rte_eth_dev *dev);\n-static int  ixgbe_dev_set_link_down(struct rte_eth_dev *dev);\n-static int  ixgbe_dev_close(struct rte_eth_dev *dev);\n-static int  ixgbe_dev_reset(struct rte_eth_dev *dev);\n+static int ixgbe_dev_configure(struct rte_eth_dev *dev);\n+static int ixgbe_dev_start(struct rte_eth_dev *dev);\n+static int ixgbe_dev_stop(struct rte_eth_dev *dev);\n+static int ixgbe_dev_set_link_up(struct rte_eth_dev *dev);\n+static int ixgbe_dev_set_link_down(struct rte_eth_dev *dev);\n+static int ixgbe_dev_close(struct rte_eth_dev *dev);\n+static int ixgbe_dev_reset(struct rte_eth_dev *dev);\n static int ixgbe_dev_promiscuous_enable(struct rte_eth_dev *dev);\n static int ixgbe_dev_promiscuous_disable(struct rte_eth_dev *dev);\n static int ixgbe_dev_allmulticast_enable(struct rte_eth_dev *dev);\n@@ -250,7 +250,7 @@ static int  ixgbevf_dev_configure(struct rte_eth_dev *dev);\n static int  ixgbevf_dev_start(struct rte_eth_dev *dev);\n static int ixgbevf_dev_link_update(struct rte_eth_dev *dev,\n \t\t\t\t   int wait_to_complete);\n-static void ixgbevf_dev_stop(struct rte_eth_dev *dev);\n+static int ixgbevf_dev_stop(struct rte_eth_dev *dev);\n static int ixgbevf_dev_close(struct rte_eth_dev *dev);\n static int  ixgbevf_dev_reset(struct rte_eth_dev *dev);\n static void ixgbevf_intr_disable(struct rte_eth_dev *dev);\n@@ -2845,7 +2845,7 @@ ixgbe_dev_start(struct rte_eth_dev *dev)\n /*\n  * Stop device: disable rx and tx functions to allow for reconfiguring.\n  */\n-static void\n+static int\n ixgbe_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct rte_eth_link link;\n@@ -2861,7 +2861,7 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)\n \t\tIXGBE_DEV_PRIVATE_TO_TM_CONF(dev->data->dev_private);\n \n \tif (hw->adapter_stopped)\n-\t\treturn;\n+\t\treturn 0;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -2917,6 +2917,8 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)\n \tadapter->rss_reta_updated = 0;\n \n \thw->adapter_stopped = true;\n+\n+\treturn 0;\n }\n \n /*\n@@ -3000,7 +3002,7 @@ ixgbe_dev_close(struct rte_eth_dev *dev)\n \n \tixgbe_pf_reset_hw(hw);\n \n-\tixgbe_dev_stop(dev);\n+\tret = ixgbe_dev_stop(dev);\n \n \tixgbe_dev_free_queues(dev);\n \n@@ -3057,7 +3059,7 @@ ixgbe_dev_close(struct rte_eth_dev *dev)\n \trte_free(dev->security_ctx);\n #endif\n \n-\treturn 0;\n+\treturn ret;\n }\n \n /*\n@@ -5401,7 +5403,7 @@ ixgbevf_dev_start(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-static void\n+static int\n ixgbevf_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n@@ -5410,7 +5412,7 @@ ixgbevf_dev_stop(struct rte_eth_dev *dev)\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n \n \tif (hw->adapter_stopped)\n-\t\treturn;\n+\t\treturn 0;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -5440,6 +5442,8 @@ ixgbevf_dev_stop(struct rte_eth_dev *dev)\n \t}\n \n \tadapter->rss_reta_updated = 0;\n+\n+\treturn 0;\n }\n \n static int\n@@ -5448,6 +5452,7 @@ ixgbevf_dev_close(struct rte_eth_dev *dev)\n \tstruct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n+\tint ret;\n \n \tPMD_INIT_FUNC_TRACE();\n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n@@ -5455,7 +5460,7 @@ ixgbevf_dev_close(struct rte_eth_dev *dev)\n \n \tixgbe_reset_hw(hw);\n \n-\tixgbevf_dev_stop(dev);\n+\tret = ixgbevf_dev_stop(dev);\n \n \tixgbe_dev_free_queues(dev);\n \n@@ -5474,7 +5479,7 @@ ixgbevf_dev_close(struct rte_eth_dev *dev)\n \trte_intr_callback_unregister(intr_handle,\n \t\t\t\t     ixgbevf_dev_interrupt_handler, dev);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n /*\ndiff --git a/drivers/net/ixgbe/ixgbe_vf_representor.c b/drivers/net/ixgbe/ixgbe_vf_representor.c\nindex edb5d43846..8185f0d3bb 100644\n--- a/drivers/net/ixgbe/ixgbe_vf_representor.c\n+++ b/drivers/net/ixgbe/ixgbe_vf_representor.c\n@@ -113,8 +113,9 @@ static int ixgbe_vf_representor_dev_start(__rte_unused struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-static void ixgbe_vf_representor_dev_stop(__rte_unused struct rte_eth_dev *dev)\n+static int ixgbe_vf_representor_dev_stop(__rte_unused struct rte_eth_dev *dev)\n {\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/kni/rte_eth_kni.c b/drivers/net/kni/rte_eth_kni.c\nindex be747adf86..324be4f76c 100644\n--- a/drivers/net/kni/rte_eth_kni.c\n+++ b/drivers/net/kni/rte_eth_kni.c\n@@ -177,7 +177,7 @@ eth_kni_dev_start(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-static void\n+static int\n eth_kni_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct pmd_internals *internals = dev->data->dev_private;\n@@ -196,6 +196,8 @@ eth_kni_dev_stop(struct rte_eth_dev *dev)\n \t}\n \n \tdev->data->dev_link.link_status = 0;\n+\n+\treturn 0;\n }\n \n static int\n@@ -207,7 +209,7 @@ eth_kni_close(struct rte_eth_dev *eth_dev)\n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\teth_kni_dev_stop(eth_dev);\n+\tret = eth_kni_dev_stop(eth_dev);\n \n \t/* mac_addrs must not be freed alone because part of dev_private */\n \teth_dev->data->mac_addrs = NULL;\n@@ -218,7 +220,7 @@ eth_kni_close(struct rte_eth_dev *eth_dev)\n \t\tPMD_LOG(WARNING, \"Not able to release kni for %s\",\n \t\t\teth_dev->data->name);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\n@@ -485,6 +487,7 @@ eth_kni_remove(struct rte_vdev_device *vdev)\n {\n \tstruct rte_eth_dev *eth_dev;\n \tconst char *name;\n+\tint ret;\n \n \tname = rte_vdev_device_name(vdev);\n \tPMD_LOG(INFO, \"Un-Initializing eth_kni for %s\", name);\n@@ -493,7 +496,9 @@ eth_kni_remove(struct rte_vdev_device *vdev)\n \teth_dev = rte_eth_dev_allocated(name);\n \tif (eth_dev != NULL) {\n \t\tif (rte_eal_process_type() != RTE_PROC_PRIMARY) {\n-\t\t\teth_kni_dev_stop(eth_dev);\n+\t\t\tret = eth_kni_dev_stop(eth_dev);\n+\t\t\tif (ret != 0)\n+\t\t\t\treturn ret;\n \t\t\treturn rte_eth_dev_release_port(eth_dev);\n \t\t}\n \t\teth_kni_close(eth_dev);\ndiff --git a/drivers/net/liquidio/lio_ethdev.c b/drivers/net/liquidio/lio_ethdev.c\nindex 1a41f27198..babc473694 100644\n--- a/drivers/net/liquidio/lio_ethdev.c\n+++ b/drivers/net/liquidio/lio_ethdev.c\n@@ -1465,7 +1465,7 @@ lio_dev_start(struct rte_eth_dev *eth_dev)\n }\n \n /* Stop device and disable input/output functions */\n-static void\n+static int\n lio_dev_stop(struct rte_eth_dev *eth_dev)\n {\n \tstruct lio_device *lio_dev = LIO_DEV(eth_dev);\n@@ -1483,6 +1483,8 @@ lio_dev_stop(struct rte_eth_dev *eth_dev)\n \n \t/* Clear recorded link status */\n \tlio_dev->linfo.link.link_status64 = 0;\n+\n+\treturn 0;\n }\n \n static int\n@@ -1554,6 +1556,7 @@ static int\n lio_dev_close(struct rte_eth_dev *eth_dev)\n {\n \tstruct lio_device *lio_dev = LIO_DEV(eth_dev);\n+\tint ret = 0;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n@@ -1561,7 +1564,7 @@ lio_dev_close(struct rte_eth_dev *eth_dev)\n \tlio_dev_info(lio_dev, \"closing port %d\\n\", eth_dev->data->port_id);\n \n \tif (lio_dev->intf_open)\n-\t\tlio_dev_stop(eth_dev);\n+\t\tret = lio_dev_stop(eth_dev);\n \n \t/* Reset ioq regs */\n \tlio_dev->fn_list.setup_device_regs(lio_dev);\n@@ -1585,7 +1588,7 @@ lio_dev_close(struct rte_eth_dev *eth_dev)\n \t /* Delete all queues */\n \tlio_dev_clear_queues(eth_dev);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n /**\n@@ -1703,6 +1706,7 @@ static int\n lio_reconf_queues(struct rte_eth_dev *eth_dev, int num_txq, int num_rxq)\n {\n \tstruct lio_device *lio_dev = LIO_DEV(eth_dev);\n+\tint ret;\n \n \tif (lio_dev->nb_rx_queues != num_rxq ||\n \t    lio_dev->nb_tx_queues != num_txq) {\n@@ -1712,8 +1716,11 @@ lio_reconf_queues(struct rte_eth_dev *eth_dev, int num_txq, int num_rxq)\n \t\tlio_dev->nb_tx_queues = num_txq;\n \t}\n \n-\tif (lio_dev->intf_open)\n-\t\tlio_dev_stop(eth_dev);\n+\tif (lio_dev->intf_open) {\n+\t\tret = lio_dev_stop(eth_dev);\n+\t\tif (ret != 0)\n+\t\t\treturn ret;\n+\t}\n \n \t/* Reset ioq registers */\n \tif (lio_dev->fn_list.setup_device_regs(lio_dev)) {\ndiff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c\nindex cfcfb8a8fc..0857f5e1e3 100644\n--- a/drivers/net/mlx4/mlx4.c\n+++ b/drivers/net/mlx4/mlx4.c\n@@ -81,7 +81,7 @@ const char *pmd_mlx4_init_params[] = {\n \tNULL,\n };\n \n-static void mlx4_dev_stop(struct rte_eth_dev *dev);\n+static int mlx4_dev_stop(struct rte_eth_dev *dev);\n \n /**\n  * Initialize shared data between primary and secondary process.\n@@ -343,13 +343,13 @@ mlx4_dev_start(struct rte_eth_dev *dev)\n  * @param dev\n  *   Pointer to Ethernet device structure.\n  */\n-static void\n+static int\n mlx4_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct mlx4_priv *priv = dev->data->dev_private;\n \n \tif (!priv->started)\n-\t\treturn;\n+\t\treturn 0;\n \tDEBUG(\"%p: detaching flows from all RX queues\", (void *)dev);\n \tpriv->started = 0;\n \tdev->tx_pkt_burst = mlx4_tx_burst_removed;\n@@ -360,6 +360,8 @@ mlx4_dev_stop(struct rte_eth_dev *dev)\n \tmlx4_flow_sync(priv, NULL);\n \tmlx4_rxq_intr_disable(priv);\n \tmlx4_rss_deinit(priv);\n+\n+\treturn 0;\n }\n \n /**\ndiff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h\nindex e528833ce3..1408cf94d6 100644\n--- a/drivers/net/mlx5/mlx5.h\n+++ b/drivers/net/mlx5/mlx5.h\n@@ -1030,7 +1030,7 @@ void *mlx5_vlan_vmwa_init(struct rte_eth_dev *dev, uint32_t ifindex);\n /* mlx5_trigger.c */\n \n int mlx5_dev_start(struct rte_eth_dev *dev);\n-void mlx5_dev_stop(struct rte_eth_dev *dev);\n+int mlx5_dev_stop(struct rte_eth_dev *dev);\n int mlx5_traffic_enable(struct rte_eth_dev *dev);\n void mlx5_traffic_disable(struct rte_eth_dev *dev);\n int mlx5_traffic_restart(struct rte_eth_dev *dev);\ndiff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c\nindex e72e5fbde2..7735f022a3 100644\n--- a/drivers/net/mlx5/mlx5_trigger.c\n+++ b/drivers/net/mlx5/mlx5_trigger.c\n@@ -409,7 +409,7 @@ mlx5_dev_start(struct rte_eth_dev *dev)\n  * @param dev\n  *   Pointer to Ethernet device structure.\n  */\n-void\n+int\n mlx5_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n@@ -434,6 +434,8 @@ mlx5_dev_stop(struct rte_eth_dev *dev)\n \tmlx5_txq_stop(dev);\n \tmlx5_rxq_stop(dev);\n \tmlx5_txpp_stop(dev);\n+\n+\treturn 0;\n }\n \n /**\ndiff --git a/drivers/net/mvneta/mvneta_ethdev.c b/drivers/net/mvneta/mvneta_ethdev.c\nindex 607771149a..ec37adc41b 100644\n--- a/drivers/net/mvneta/mvneta_ethdev.c\n+++ b/drivers/net/mvneta/mvneta_ethdev.c\n@@ -408,19 +408,21 @@ mvneta_dev_start(struct rte_eth_dev *dev)\n  * @param dev\n  *   Pointer to Ethernet device structure.\n  */\n-static void\n+static int\n mvneta_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct mvneta_priv *priv = dev->data->dev_private;\n \n \tif (!priv->ppio)\n-\t\treturn;\n+\t\treturn 0;\n \n \tmvneta_dev_set_link_down(dev);\n \tmvneta_flush_queues(dev);\n \tneta_ppio_deinit(priv->ppio);\n \n \tpriv->ppio = NULL;\n+\n+\treturn 0;\n }\n \n /**\n@@ -433,13 +435,13 @@ static int\n mvneta_dev_close(struct rte_eth_dev *dev)\n {\n \tstruct mvneta_priv *priv = dev->data->dev_private;\n-\tint i;\n+\tint i, ret = 0;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n \tif (priv->ppio)\n-\t\tmvneta_dev_stop(dev);\n+\t\tret = mvneta_dev_stop(dev);\n \n \tfor (i = 0; i < dev->data->nb_rx_queues; i++) {\n \t\tmvneta_rx_queue_release(dev->data->rx_queues[i]);\n@@ -459,7 +461,7 @@ mvneta_dev_close(struct rte_eth_dev *dev)\n \t\trte_mvep_deinit(MVEP_MOD_T_NETA);\n \t}\n \n-\treturn 0;\n+\treturn ret;\n }\n \n /**\ndiff --git a/drivers/net/mvpp2/mrvl_ethdev.c b/drivers/net/mvpp2/mrvl_ethdev.c\nindex a230a96840..d7973afe27 100644\n--- a/drivers/net/mvpp2/mrvl_ethdev.c\n+++ b/drivers/net/mvpp2/mrvl_ethdev.c\n@@ -843,10 +843,10 @@ mrvl_flush_bpool(struct rte_eth_dev *dev)\n  * @param dev\n  *   Pointer to Ethernet device structure.\n  */\n-static void\n+static int\n mrvl_dev_stop(struct rte_eth_dev *dev)\n {\n-\tmrvl_dev_set_link_down(dev);\n+\treturn mrvl_dev_set_link_down(dev);\n }\n \n /**\ndiff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c\nindex 5ae2d469c8..9150dfecd7 100644\n--- a/drivers/net/netvsc/hn_ethdev.c\n+++ b/drivers/net/netvsc/hn_ethdev.c\n@@ -827,7 +827,7 @@ hn_dev_start(struct rte_eth_dev *dev)\n \treturn error;\n }\n \n-static void\n+static int\n hn_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct hn_data *hv = dev->data->dev_private;\n@@ -835,7 +835,7 @@ hn_dev_stop(struct rte_eth_dev *dev)\n \tPMD_INIT_FUNC_TRACE();\n \n \thn_rndis_set_rxfilter(hv, 0);\n-\thn_vf_stop(dev);\n+\treturn hn_vf_stop(dev);\n }\n \n static int\n@@ -1039,14 +1039,14 @@ static int\n eth_hn_dev_uninit(struct rte_eth_dev *eth_dev)\n {\n \tstruct hn_data *hv = eth_dev->data->dev_private;\n-\tint ret;\n+\tint ret, ret_stop;\n \n \tPMD_INIT_FUNC_TRACE();\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\thn_dev_stop(eth_dev);\n+\tret_stop = hn_dev_stop(eth_dev);\n \thn_dev_close(eth_dev);\n \n \teth_dev->dev_ops = NULL;\n@@ -1061,7 +1061,7 @@ eth_hn_dev_uninit(struct rte_eth_dev *eth_dev)\n \tif (ret != 0)\n \t\treturn ret;\n \n-\treturn 0;\n+\treturn ret_stop;\n }\n \n static int eth_hn_probe(struct rte_vmbus_driver *drv __rte_unused,\ndiff --git a/drivers/net/netvsc/hn_var.h b/drivers/net/netvsc/hn_var.h\nindex 4b63f87607..9f8b40c912 100644\n--- a/drivers/net/netvsc/hn_var.h\n+++ b/drivers/net/netvsc/hn_var.h\n@@ -216,7 +216,7 @@ int\thn_vf_configure(struct rte_eth_dev *dev,\n const uint32_t *hn_vf_supported_ptypes(struct rte_eth_dev *dev);\n int\thn_vf_start(struct rte_eth_dev *dev);\n void\thn_vf_reset(struct rte_eth_dev *dev);\n-void\thn_vf_stop(struct rte_eth_dev *dev);\n+int\thn_vf_stop(struct rte_eth_dev *dev);\n void\thn_vf_close(struct rte_eth_dev *dev);\n \n int\thn_vf_allmulticast_enable(struct rte_eth_dev *dev);\ndiff --git a/drivers/net/netvsc/hn_vf.c b/drivers/net/netvsc/hn_vf.c\nindex f5f15c0462..ce896a00bc 100644\n--- a/drivers/net/netvsc/hn_vf.c\n+++ b/drivers/net/netvsc/hn_vf.c\n@@ -273,16 +273,23 @@ int hn_vf_start(struct rte_eth_dev *dev)\n \treturn ret;\n }\n \n-void hn_vf_stop(struct rte_eth_dev *dev)\n+int hn_vf_stop(struct rte_eth_dev *dev)\n {\n \tstruct hn_data *hv = dev->data->dev_private;\n \tstruct rte_eth_dev *vf_dev;\n+\tint ret = 0;\n \n \trte_rwlock_read_lock(&hv->vf_lock);\n \tvf_dev = hn_get_vf_dev(hv);\n-\tif (vf_dev)\n-\t\trte_eth_dev_stop(vf_dev->data->port_id);\n+\tif (vf_dev) {\n+\t\tret = rte_eth_dev_stop(vf_dev->data->port_id);\n+\t\tif (ret != 0)\n+\t\t\tPMD_DRV_LOG(ERR, \"Failed to stop device on port %u\",\n+\t\t\t\t    vf_dev->data->port_id);\n+\t}\n \trte_rwlock_read_unlock(&hv->vf_lock);\n+\n+\treturn ret;\n }\n \n /* If VF is present, then cascade configuration down */\ndiff --git a/drivers/net/nfb/nfb_ethdev.c b/drivers/net/nfb/nfb_ethdev.c\nindex a9a8bc878d..d849055497 100644\n--- a/drivers/net/nfb/nfb_ethdev.c\n+++ b/drivers/net/nfb/nfb_ethdev.c\n@@ -151,7 +151,7 @@ nfb_eth_dev_start(struct rte_eth_dev *dev)\n  * @param dev\n  *   Pointer to Ethernet device structure.\n  */\n-static void\n+static int\n nfb_eth_dev_stop(struct rte_eth_dev *dev)\n {\n \tuint16_t i;\n@@ -163,6 +163,8 @@ nfb_eth_dev_stop(struct rte_eth_dev *dev)\n \n \tfor (i = 0; i < nb_rx; i++)\n \t\tnfb_eth_rx_queue_stop(dev, i);\n+\n+\treturn 0;\n }\n \n /**\n@@ -216,11 +218,12 @@ nfb_eth_dev_close(struct rte_eth_dev *dev)\n \tuint16_t i;\n \tuint16_t nb_rx = dev->data->nb_rx_queues;\n \tuint16_t nb_tx = dev->data->nb_tx_queues;\n+\tint ret;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\tnfb_eth_dev_stop(dev);\n+\tret = nfb_eth_dev_stop(dev);\n \n \tnfb_nc_rxmac_deinit(internals->rxmac, internals->max_rxmac);\n \tnfb_nc_txmac_deinit(internals->txmac, internals->max_txmac);\n@@ -236,7 +239,7 @@ nfb_eth_dev_close(struct rte_eth_dev *dev)\n \t}\n \tdev->data->nb_tx_queues = 0;\n \n-\treturn 0;\n+\treturn ret;\n }\n \n /**\ndiff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c\nindex c1da66e3d6..38203777a3 100644\n--- a/drivers/net/nfp/nfp_net.c\n+++ b/drivers/net/nfp/nfp_net.c\n@@ -80,7 +80,7 @@ static int nfp_net_start(struct rte_eth_dev *dev);\n static int nfp_net_stats_get(struct rte_eth_dev *dev,\n \t\t\t      struct rte_eth_stats *stats);\n static int nfp_net_stats_reset(struct rte_eth_dev *dev);\n-static void nfp_net_stop(struct rte_eth_dev *dev);\n+static int nfp_net_stop(struct rte_eth_dev *dev);\n static uint16_t nfp_net_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n \t\t\t\t  uint16_t nb_pkts);\n \n@@ -788,7 +788,7 @@ nfp_net_start(struct rte_eth_dev *dev)\n }\n \n /* Stop device: disable rx and tx functions to allow for reconfiguring. */\n-static void\n+static int\n nfp_net_stop(struct rte_eth_dev *dev)\n {\n \tint i;\n@@ -819,6 +819,8 @@ nfp_net_stop(struct rte_eth_dev *dev)\n \t\t\tnfp_eth_set_configured(dev->process_private,\n \t\t\t\t\t       hw->pf_port_idx, 0);\n \t}\n+\n+\treturn 0;\n }\n \n /* Set the link up. */\ndiff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c\nindex 7c3c76a897..9ed88f110f 100644\n--- a/drivers/net/null/rte_eth_null.c\n+++ b/drivers/net/null/rte_eth_null.c\n@@ -193,13 +193,15 @@ eth_dev_start(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-static void\n+static int\n eth_dev_stop(struct rte_eth_dev *dev)\n {\n \tif (dev == NULL)\n-\t\treturn;\n+\t\treturn 0;\n \n \tdev->data->dev_link.link_status = ETH_LINK_DOWN;\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c\nindex aa9ef3bb70..3f08dfca57 100644\n--- a/drivers/net/octeontx/octeontx_ethdev.c\n+++ b/drivers/net/octeontx/octeontx_ethdev.c\n@@ -676,7 +676,7 @@ octeontx_dev_start(struct rte_eth_dev *dev)\n \treturn ret;\n }\n \n-static void\n+static int\n octeontx_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct octeontx_nic *nic = octeontx_pmd_priv(dev);\n@@ -690,14 +690,14 @@ octeontx_dev_stop(struct rte_eth_dev *dev)\n \tif (ret < 0) {\n \t\tocteontx_log_err(\"failed to req stop port %d res=%d\",\n \t\t\t\t\tnic->port_id, ret);\n-\t\treturn;\n+\t\treturn ret;\n \t}\n \n \tret = octeontx_pki_port_stop(nic->port_id);\n \tif (ret < 0) {\n \t\tocteontx_log_err(\"failed to stop pki port %d res=%d\",\n \t\t\t\t\tnic->port_id, ret);\n-\t\treturn;\n+\t\treturn ret;\n \t}\n \n \tret = octeontx_pko_channel_stop(nic->base_ochan);\n@@ -705,8 +705,10 @@ octeontx_dev_stop(struct rte_eth_dev *dev)\n \t\tocteontx_log_err(\"failed to stop channel %d VF%d %d %d\",\n \t\t\t     nic->base_ochan, nic->port_id, nic->num_tx_queues,\n \t\t\t     ret);\n-\t\treturn;\n+\t\treturn ret;\n \t}\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/octeontx2/otx2_ethdev.c b/drivers/net/octeontx2/otx2_ethdev.c\nindex b69b92bf58..e52e1952ba 100644\n--- a/drivers/net/octeontx2/otx2_ethdev.c\n+++ b/drivers/net/octeontx2/otx2_ethdev.c\n@@ -2139,7 +2139,7 @@ otx2_nix_rx_queue_stop(struct rte_eth_dev *eth_dev, uint16_t qidx)\n \treturn rc;\n }\n \n-static void\n+static int\n otx2_nix_dev_stop(struct rte_eth_dev *eth_dev)\n {\n \tstruct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev);\n@@ -2169,6 +2169,8 @@ otx2_nix_dev_stop(struct rte_eth_dev *eth_dev)\n \t/* Stop tx queues  */\n \tfor (i = 0; i < eth_dev->data->nb_tx_queues; i++)\n \t\totx2_nix_tx_queue_stop(eth_dev, i);\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c\nindex 49764c0ee6..595474558b 100644\n--- a/drivers/net/pcap/rte_eth_pcap.c\n+++ b/drivers/net/pcap/rte_eth_pcap.c\n@@ -607,7 +607,7 @@ eth_dev_start(struct rte_eth_dev *dev)\n  * Is the only place for us to close all the tx streams dumpers.\n  * If not called the dumpers will be flushed within each tx burst.\n  */\n-static void\n+static int\n eth_dev_stop(struct rte_eth_dev *dev)\n {\n \tunsigned int i;\n@@ -649,6 +649,8 @@ eth_dev_stop(struct rte_eth_dev *dev)\n \t\tdev->data->tx_queue_state[i] = RTE_ETH_QUEUE_STATE_STOPPED;\n \n \tdev->data->dev_link.link_status = ETH_LINK_DOWN;\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/pfe/pfe_ethdev.c b/drivers/net/pfe/pfe_ethdev.c\nindex f0de1c8a2e..44ef2bc1f0 100644\n--- a/drivers/net/pfe/pfe_ethdev.c\n+++ b/drivers/net/pfe/pfe_ethdev.c\n@@ -373,7 +373,7 @@ pfe_eth_close_cdev(struct pfe_eth_priv_s *priv)\n \t}\n }\n \n-static void\n+static int\n pfe_eth_stop(struct rte_eth_dev *dev/*, int wake*/)\n {\n \tstruct pfe_eth_priv_s *priv = dev->data->dev_private;\n@@ -383,11 +383,14 @@ pfe_eth_stop(struct rte_eth_dev *dev/*, int wake*/)\n \n \tdev->rx_pkt_burst = &pfe_dummy_recv_pkts;\n \tdev->tx_pkt_burst = &pfe_dummy_xmit_pkts;\n+\n+\treturn 0;\n }\n \n static int\n pfe_eth_close(struct rte_eth_dev *dev)\n {\n+\tint ret;\n \tPMD_INIT_FUNC_TRACE();\n \n \tif (!dev)\n@@ -399,7 +402,7 @@ pfe_eth_close(struct rte_eth_dev *dev)\n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\tpfe_eth_stop(dev);\n+\tret = pfe_eth_stop(dev);\n \t/* Close the device file for link status */\n \tpfe_eth_close_cdev(dev->data->dev_private);\n \n@@ -413,7 +416,7 @@ pfe_eth_close(struct rte_eth_dev *dev)\n \t\tg_pfe = NULL;\n \t}\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\n@@ -667,8 +670,7 @@ pfe_allmulticast_enable(struct rte_eth_dev *dev)\n static int\n pfe_link_down(struct rte_eth_dev *dev)\n {\n-\tpfe_eth_stop(dev);\n-\treturn 0;\n+\treturn pfe_eth_stop(dev);\n }\n \n static int\n@@ -843,7 +845,9 @@ pfe_eth_init(struct rte_vdev_device *vdev, struct pfe *pfe, int id)\n \n \teth_dev->data->mtu = 1500;\n \teth_dev->dev_ops = &ops;\n-\tpfe_eth_stop(eth_dev);\n+\terr = pfe_eth_stop(eth_dev);\n+\tif (err != 0)\n+\t\tgoto err0;\n \tpfe_gemac_init(priv);\n \n \teth_dev->data->nb_rx_queues = 1;\ndiff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c\nindex 548497f3ae..f85c246392 100644\n--- a/drivers/net/qede/qede_ethdev.c\n+++ b/drivers/net/qede/qede_ethdev.c\n@@ -1163,7 +1163,7 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev)\n \treturn -1; /* common error code is < 0 */\n }\n \n-static void qede_dev_stop(struct rte_eth_dev *eth_dev)\n+static int qede_dev_stop(struct rte_eth_dev *eth_dev)\n {\n \tstruct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);\n \tstruct ecore_dev *edev = QEDE_INIT_EDEV(qdev);\n@@ -1183,7 +1183,7 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev)\n \n \t/* Disable vport */\n \tif (qede_activate_vport(eth_dev, false))\n-\t\treturn;\n+\t\treturn 0;\n \n \tif (qdev->enable_lro)\n \t\tqede_enable_tpa(eth_dev, false);\n@@ -1195,6 +1195,8 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev)\n \tecore_hw_stop_fastpath(edev); /* TBD - loop */\n \n \tDP_INFO(edev, \"Device is stopped\\n\");\n+\n+\treturn 0;\n }\n \n static const char * const valid_args[] = {\n@@ -1549,6 +1551,7 @@ static int qede_dev_close(struct rte_eth_dev *eth_dev)\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);\n \tstruct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);\n \tstruct ecore_dev *edev = QEDE_INIT_EDEV(qdev);\n+\tint ret = 0;\n \n \tPMD_INIT_FUNC_TRACE(edev);\n \n@@ -1562,7 +1565,7 @@ static int qede_dev_close(struct rte_eth_dev *eth_dev)\n \t * can release all the resources and device can be brought up newly\n \t */\n \tif (eth_dev->data->dev_started)\n-\t\tqede_dev_stop(eth_dev);\n+\t\tret = qede_dev_stop(eth_dev);\n \n \tif (qdev->vport_started)\n \t\tqede_stop_vport(edev);\n@@ -1597,7 +1600,7 @@ static int qede_dev_close(struct rte_eth_dev *eth_dev)\n \teth_dev->rx_pkt_burst = NULL;\n \teth_dev->tx_pkt_burst = NULL;\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\n@@ -2342,7 +2345,9 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)\n \t}\n \tif (dev->data->dev_started) {\n \t\tdev->data->dev_started = 0;\n-\t\tqede_dev_stop(dev);\n+\t\trc = qede_dev_stop(dev);\n+\t\tif (rc != 0)\n+\t\t\treturn rc;\n \t\trestart = true;\n \t}\n \trte_delay_ms(1000);\ndiff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c\nindex 22c0802688..fa91d8c965 100644\n--- a/drivers/net/ring/rte_eth_ring.c\n+++ b/drivers/net/ring/rte_eth_ring.c\n@@ -106,10 +106,11 @@ eth_dev_start(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-static void\n+static int\n eth_dev_stop(struct rte_eth_dev *dev)\n {\n \tdev->data->dev_link.link_status = ETH_LINK_DOWN;\n+\treturn 0;\n }\n \n static int\n@@ -235,11 +236,12 @@ eth_dev_close(struct rte_eth_dev *dev)\n \tstruct pmd_internals *internals = NULL;\n \tstruct ring_queue *r = NULL;\n \tuint16_t i;\n+\tint ret;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\teth_dev_stop(dev);\n+\tret = eth_dev_stop(dev);\n \n \tinternals = dev->data->dev_private;\n \tif (internals->action == DEV_CREATE) {\n@@ -256,7 +258,7 @@ eth_dev_close(struct rte_eth_dev *dev)\n \t/* mac_addrs must not be freed alone because part of dev_private */\n \tdev->data->mac_addrs = NULL;\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static const struct eth_dev_ops ops = {\ndiff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c\nindex 165776b652..fed9fc370c 100644\n--- a/drivers/net/sfc/sfc_ethdev.c\n+++ b/drivers/net/sfc/sfc_ethdev.c\n@@ -276,7 +276,7 @@ sfc_dev_link_update(struct rte_eth_dev *dev, int wait_to_complete)\n \treturn ret;\n }\n \n-static void\n+static int\n sfc_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);\n@@ -288,6 +288,8 @@ sfc_dev_stop(struct rte_eth_dev *dev)\n \tsfc_adapter_unlock(sa);\n \n \tsfc_log_init(sa, \"done\");\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/softnic/rte_eth_softnic.c b/drivers/net/softnic/rte_eth_softnic.c\nindex e942df78b6..3387ab485f 100644\n--- a/drivers/net/softnic/rte_eth_softnic.c\n+++ b/drivers/net/softnic/rte_eth_softnic.c\n@@ -178,7 +178,7 @@ pmd_dev_start(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-static void\n+static int\n pmd_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct pmd_internals *p = dev->data->dev_private;\n@@ -199,6 +199,8 @@ pmd_dev_stop(struct rte_eth_dev *dev)\n \n \ttm_hierarchy_free(p);\n \tsoftnic_mtr_free(p);\n+\n+\treturn 0;\n }\n \n static void\ndiff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c\nindex 0eecec1e8c..c5e4fbee62 100644\n--- a/drivers/net/szedata2/rte_eth_szedata2.c\n+++ b/drivers/net/szedata2/rte_eth_szedata2.c\n@@ -1013,18 +1013,27 @@ eth_dev_start(struct rte_eth_dev *dev)\n \treturn ret;\n }\n \n-static void\n+static int\n eth_dev_stop(struct rte_eth_dev *dev)\n {\n \tuint16_t i;\n \tuint16_t nb_rx = dev->data->nb_rx_queues;\n \tuint16_t nb_tx = dev->data->nb_tx_queues;\n+\tint ret;\n \n-\tfor (i = 0; i < nb_tx; i++)\n-\t\teth_tx_queue_stop(dev, i);\n+\tfor (i = 0; i < nb_tx; i++) {\n+\t\tret = eth_tx_queue_stop(dev, i);\n+\t\tif (ret != 0)\n+\t\t\treturn ret;\n+\t}\n \n-\tfor (i = 0; i < nb_rx; i++)\n-\t\teth_rx_queue_stop(dev, i);\n+\tfor (i = 0; i < nb_rx; i++) {\n+\t\tret = eth_rx_queue_stop(dev, i);\n+\t\tif (ret != 0)\n+\t\t\treturn ret;\n+\t}\n+\n+\treturn 0;\n }\n \n static int\n@@ -1162,11 +1171,12 @@ eth_dev_close(struct rte_eth_dev *dev)\n \tuint16_t i;\n \tuint16_t nb_rx = dev->data->nb_rx_queues;\n \tuint16_t nb_tx = dev->data->nb_tx_queues;\n+\tint ret;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\teth_dev_stop(dev);\n+\tret = eth_dev_stop(dev);\n \n \tfree(internals->sze_dev_path);\n \n@@ -1181,7 +1191,7 @@ eth_dev_close(struct rte_eth_dev *dev)\n \t}\n \tdev->data->nb_tx_queues = 0;\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\ndiff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c\nindex e592a469b3..7047a42ce8 100644\n--- a/drivers/net/tap/rte_eth_tap.c\n+++ b/drivers/net/tap/rte_eth_tap.c\n@@ -900,7 +900,7 @@ tap_dev_start(struct rte_eth_dev *dev)\n \n /* This function gets called when the current port gets stopped.\n  */\n-static void\n+static int\n tap_dev_stop(struct rte_eth_dev *dev)\n {\n \tint i;\n@@ -912,6 +912,8 @@ tap_dev_stop(struct rte_eth_dev *dev)\n \n \ttap_intr_handle_set(dev, 0);\n \ttap_link_set_down(dev);\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c\nindex cc6eb4ba24..7ff4cdcb86 100644\n--- a/drivers/net/thunderx/nicvf_ethdev.c\n+++ b/drivers/net/thunderx/nicvf_ethdev.c\n@@ -44,7 +44,7 @@\n #include \"nicvf_svf.h\"\n #include \"nicvf_logs.h\"\n \n-static void nicvf_dev_stop(struct rte_eth_dev *dev);\n+static int nicvf_dev_stop(struct rte_eth_dev *dev);\n static void nicvf_dev_stop_cleanup(struct rte_eth_dev *dev, bool cleanup);\n static void nicvf_vf_stop(struct rte_eth_dev *dev, struct nicvf *nic,\n \t\t\t  bool cleanup);\n@@ -1789,12 +1789,14 @@ nicvf_dev_stop_cleanup(struct rte_eth_dev *dev, bool cleanup)\n \t\tPMD_INIT_LOG(ERR, \"Failed to reclaim CPI config %d\", ret);\n }\n \n-static void\n+static int\n nicvf_dev_stop(struct rte_eth_dev *dev)\n {\n \tPMD_INIT_FUNC_TRACE();\n \n \tnicvf_dev_stop_cleanup(dev, false);\n+\n+\treturn 0;\n }\n \n static void\ndiff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c\nindex 66efecb320..d28abc5b56 100644\n--- a/drivers/net/vhost/rte_eth_vhost.c\n+++ b/drivers/net/vhost/rte_eth_vhost.c\n@@ -1153,13 +1153,15 @@ eth_dev_start(struct rte_eth_dev *eth_dev)\n \treturn 0;\n }\n \n-static void\n+static int\n eth_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct pmd_internal *internal = dev->data->dev_private;\n \n \trte_atomic32_set(&internal->started, 0);\n \tupdate_queuing_status(dev);\n+\n+\treturn 0;\n }\n \n static int\n@@ -1167,7 +1169,7 @@ eth_dev_close(struct rte_eth_dev *dev)\n {\n \tstruct pmd_internal *internal;\n \tstruct internal_list *list;\n-\tunsigned int i;\n+\tunsigned int i, ret;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n@@ -1176,7 +1178,7 @@ eth_dev_close(struct rte_eth_dev *dev)\n \tif (!internal)\n \t\treturn 0;\n \n-\teth_dev_stop(dev);\n+\tret = eth_dev_stop(dev);\n \n \tlist = find_internal_resource(internal->iface_name);\n \tif (list) {\n@@ -1203,7 +1205,7 @@ eth_dev_close(struct rte_eth_dev *dev)\n \trte_free(vring_states[dev->data->port_id]);\n \tvring_states[dev->data->port_id] = NULL;\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static int\ndiff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c\nindex 65eefa2a31..0cca8ff30c 100644\n--- a/drivers/net/virtio/virtio_ethdev.c\n+++ b/drivers/net/virtio/virtio_ethdev.c\n@@ -40,7 +40,7 @@\n static int eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev);\n static int  virtio_dev_configure(struct rte_eth_dev *dev);\n static int  virtio_dev_start(struct rte_eth_dev *dev);\n-static void virtio_dev_stop(struct rte_eth_dev *dev);\n+static int  virtio_dev_stop(struct rte_eth_dev *dev);\n static int virtio_dev_promiscuous_enable(struct rte_eth_dev *dev);\n static int virtio_dev_promiscuous_disable(struct rte_eth_dev *dev);\n static int virtio_dev_allmulticast_enable(struct rte_eth_dev *dev);\n@@ -1993,12 +1993,13 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev)\n static int\n eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev)\n {\n+\tint ret;\n \tPMD_INIT_FUNC_TRACE();\n \n \tif (rte_eal_process_type() == RTE_PROC_SECONDARY)\n \t\treturn 0;\n \n-\tvirtio_dev_stop(eth_dev);\n+\tret = virtio_dev_stop(eth_dev);\n \tvirtio_dev_close(eth_dev);\n \n \teth_dev->dev_ops = NULL;\n@@ -2007,7 +2008,7 @@ eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev)\n \n \tPMD_INIT_LOG(DEBUG, \"dev_uninit completed\");\n \n-\treturn 0;\n+\treturn ret;\n }\n \n \n@@ -2515,7 +2516,7 @@ static void virtio_dev_free_mbufs(struct rte_eth_dev *dev)\n /*\n  * Stop device: disable interrupt and mark link down\n  */\n-static void\n+static int\n virtio_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct virtio_hw *hw = dev->data->dev_private;\n@@ -2544,6 +2545,8 @@ virtio_dev_stop(struct rte_eth_dev *dev)\n \trte_eth_linkstatus_set(dev, &link);\n out_unlock:\n \trte_spinlock_unlock(&hw->state_lock);\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c\nindex fa950e1ba0..6d5a8aaeaa 100644\n--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c\n+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c\n@@ -63,7 +63,7 @@ static int eth_vmxnet3_dev_init(struct rte_eth_dev *eth_dev);\n static int eth_vmxnet3_dev_uninit(struct rte_eth_dev *eth_dev);\n static int vmxnet3_dev_configure(struct rte_eth_dev *dev);\n static int vmxnet3_dev_start(struct rte_eth_dev *dev);\n-static void vmxnet3_dev_stop(struct rte_eth_dev *dev);\n+static int vmxnet3_dev_stop(struct rte_eth_dev *dev);\n static int vmxnet3_dev_close(struct rte_eth_dev *dev);\n static void vmxnet3_dev_set_rxmode(struct vmxnet3_hw *hw, uint32_t feature, int set);\n static int vmxnet3_dev_promiscuous_enable(struct rte_eth_dev *dev);\n@@ -814,7 +814,7 @@ vmxnet3_dev_start(struct rte_eth_dev *dev)\n /*\n  * Stop device: disable rx and tx functions to allow for reconfiguring.\n  */\n-static void\n+static int\n vmxnet3_dev_stop(struct rte_eth_dev *dev)\n {\n \tstruct rte_eth_link link;\n@@ -824,7 +824,7 @@ vmxnet3_dev_stop(struct rte_eth_dev *dev)\n \n \tif (hw->adapter_stopped == 1) {\n \t\tPMD_INIT_LOG(DEBUG, \"Device already stopped.\");\n-\t\treturn;\n+\t\treturn 0;\n \t}\n \n \t/* disable interrupts */\n@@ -858,6 +858,8 @@ vmxnet3_dev_stop(struct rte_eth_dev *dev)\n \trte_eth_linkstatus_set(dev, &link);\n \n \thw->adapter_stopped = 1;\n+\n+\treturn 0;\n }\n \n static void\n@@ -888,14 +890,15 @@ vmxnet3_free_queues(struct rte_eth_dev *dev)\n static int\n vmxnet3_dev_close(struct rte_eth_dev *dev)\n {\n+\tint ret;\n \tPMD_INIT_FUNC_TRACE();\n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\tvmxnet3_dev_stop(dev);\n+\tret = vmxnet3_dev_stop(dev);\n \tvmxnet3_free_queues(dev);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n static void\ndiff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c\nindex b8cf04ef4d..e64481880c 100644\n--- a/lib/librte_ethdev/rte_ethdev.c\n+++ b/lib/librte_ethdev/rte_ethdev.c\n@@ -1718,6 +1718,7 @@ int\n rte_eth_dev_stop(uint16_t port_id)\n {\n \tstruct rte_eth_dev *dev;\n+\tint ret;\n \n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n@@ -1732,10 +1733,10 @@ rte_eth_dev_stop(uint16_t port_id)\n \t}\n \n \tdev->data->dev_started = 0;\n-\t(*dev->dev_ops->dev_stop)(dev);\n-\trte_ethdev_trace_stop(port_id);\n+\tret = (*dev->dev_ops->dev_stop)(dev);\n+\trte_ethdev_trace_stop(port_id, ret);\n \n-\treturn 0;\n+\treturn ret;\n }\n \n int\ndiff --git a/lib/librte_ethdev/rte_ethdev_driver.h b/lib/librte_ethdev/rte_ethdev_driver.h\nindex 35cc4fb186..1c1c10d583 100644\n--- a/lib/librte_ethdev/rte_ethdev_driver.h\n+++ b/lib/librte_ethdev/rte_ethdev_driver.h\n@@ -33,7 +33,7 @@ typedef int  (*eth_dev_configure_t)(struct rte_eth_dev *dev);\n typedef int  (*eth_dev_start_t)(struct rte_eth_dev *dev);\n /**< @internal Function used to start a configured Ethernet device. */\n \n-typedef void (*eth_dev_stop_t)(struct rte_eth_dev *dev);\n+typedef int (*eth_dev_stop_t)(struct rte_eth_dev *dev);\n /**< @internal Function used to stop a configured Ethernet device. */\n \n typedef int  (*eth_dev_set_link_up_t)(struct rte_eth_dev *dev);\ndiff --git a/lib/librte_ethdev/rte_ethdev_trace.h b/lib/librte_ethdev/rte_ethdev_trace.h\nindex 16f5bf24b9..0036bda746 100644\n--- a/lib/librte_ethdev/rte_ethdev_trace.h\n+++ b/lib/librte_ethdev/rte_ethdev_trace.h\n@@ -77,8 +77,9 @@ RTE_TRACE_POINT(\n \n RTE_TRACE_POINT(\n \trte_ethdev_trace_stop,\n-\tRTE_TRACE_POINT_ARGS(uint16_t port_id),\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int ret),\n \trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(ret);\n )\n \n RTE_TRACE_POINT(\n",
    "prefixes": [
        "v2",
        "11/11"
    ]
}