From: "Guo, Jia" <jia.guo@intel.com>
To: Thomas Monjalon <thomas@monjalon.net>, "dev@dpdk.org" <dev@dpdk.org>
Cc: "Yigit, Ferruh" <ferruh.yigit@intel.com>,
"arybchenko@solarflare.com" <arybchenko@solarflare.com>,
"Xu, Rosen" <rosen.xu@intel.com>,
Sachin Saxena <sachin.saxena@oss.nxp.com>,
Liron Himi <lironh@marvell.com>,
"John W. Linville" <linville@tuxdriver.com>,
"Loftus, Ciara" <ciara.loftus@intel.com>,
"Zhang, Qi Z" <qi.z.zhang@intel.com>,
Shepard Siegel <shepard.siegel@atomicrules.com>,
Ed Czeck <ed.czeck@atomicrules.com>,
"John Miller" <john.miller@atomicrules.com>,
Igor Russkikh <igor.russkikh@aquantia.com>,
Pavel Belous <pavel.belous@aquantia.com>,
Steven Webster <steven.webster@windriver.com>,
Matt Peters <matt.peters@windriver.com>,
Somalapuram Amaranath <asomalap@amd.com>,
Rasesh Mody <rmody@marvell.com>,
Shahed Shaikh <shshaikh@marvell.com>,
"Ajit Khaparde" <ajit.khaparde@broadcom.com>,
Somnath Kotur <somnath.kotur@broadcom.com>,
Chas Williams <chas3@att.com>,
"Wei Hu (Xavier)" <xavier.huwei@huawei.com>,
Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>,
Hemant Agrawal <hemant.agrawal@nxp.com>,
"Wang, Haiyue" <haiyue.wang@intel.com>,
Marcin Wojtas <mw@semihalf.com>,
Michal Krawczyk <mk@semihalf.com>,
Guy Tzalik <gtzalik@amazon.com>,
"Evgeny Schemeilin" <evgenys@amazon.com>,
Igor Chauskin <igorch@amazon.com>,
"Gagandeep Singh" <g.singh@nxp.com>,
John Daley <johndale@cisco.com>,
Hyong Youb Kim <hyonkim@cisco.com>, Gaetan Rivet <grive@u256.net>,
"Wang, Xiao W" <xiao.w.wang@intel.com>,
Ziyang Xuan <xuanziyang2@huawei.com>,
Xiaoyun Wang <cloud.wangxiaoyun@huawei.com>,
Guoyang Zhou <zhouguoyang@huawei.com>,
"Min Hu (Connor)" <humin29@huawei.com>,
Yisen Zhuang <yisen.zhuang@huawei.com>,
"Xing, Beilei" <beilei.xing@intel.com>,
"Wu, Jingjing" <jingjing.wu@intel.com>,
"Yang, Qiming" <qiming.yang@intel.com>,
"Alfredo Cardigliano" <cardigliano@ntop.org>,
Shijith Thotton <sthotton@marvell.com>,
Srisivasubramanian Srinivasan <srinivasan@marvell.com>,
Jakub Grajciar <jgrajcia@cisco.com>,
Matan Azrad <matan@nvidia.com>,
Shahaf Shuler <shahafs@nvidia.com>,
Viacheslav Ovsiienko <viacheslavo@nvidia.com>,
"Zyta Szpak" <zr@semihalf.com>,
Stephen Hemminger <sthemmin@microsoft.com>,
"K. Y. Srinivasan" <kys@microsoft.com>,
Haiyang Zhang <haiyangz@microsoft.com>,
Long Li <longli@microsoft.com>,
Martin Spinler <spinler@cesnet.cz>,
Heinrich Kuhn <heinrich.kuhn@netronome.com>,
Harman Kalra <hkalra@marvell.com>,
Jerin Jacob <jerinj@marvell.com>,
Nithin Dabilpuram <ndabilpuram@marvell.com>,
Kiran Kumar K <kirankumark@marvell.com>,
"Akhil Goyal" <akhil.goyal@nxp.com>,
"Singh, Jasvinder" <jasvinder.singh@intel.com>,
"Dumitrescu, Cristian" <cristian.dumitrescu@intel.com>,
"Wiles, Keith" <keith.wiles@intel.com>,
Maciej Czekaj <mczekaj@marvell.com>,
Maxime Coquelin <maxime.coquelin@redhat.com>,
"Xia, Chenbo" <chenbo.xia@intel.com>,
"Wang, Zhihong" <zhihong.wang@intel.com>,
Yong Wang <yongwang@vmware.com>
Subject: Re: [dpdk-dev] [PATCH v3 02/29] ethdev: allow drivers to return error on close
Date: Tue, 29 Sep 2020 05:56:43 +0000 [thread overview]
Message-ID: <1c50bda2343945b38680cbbc00f2859c@intel.com> (raw)
In-Reply-To: <20200928231437.414489-3-thomas@monjalon.net>
For drivers/net/i40e,
Acked-by: Jeff Guo <jia.guo@intel.com>
> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Tuesday, September 29, 2020 7:14 AM
> To: dev@dpdk.org
> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; arybchenko@solarflare.com; Xu,
> Rosen <rosen.xu@intel.com>; Sachin Saxena <sachin.saxena@oss.nxp.com>;
> Liron Himi <lironh@marvell.com>; John W. Linville <linville@tuxdriver.com>;
> Loftus, Ciara <ciara.loftus@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>;
> Shepard Siegel <shepard.siegel@atomicrules.com>; Ed Czeck
> <ed.czeck@atomicrules.com>; John Miller <john.miller@atomicrules.com>;
> Igor Russkikh <igor.russkikh@aquantia.com>; Pavel Belous
> <pavel.belous@aquantia.com>; Steven Webster
> <steven.webster@windriver.com>; Matt Peters
> <matt.peters@windriver.com>; Somalapuram Amaranath
> <asomalap@amd.com>; Rasesh Mody <rmody@marvell.com>; Shahed
> Shaikh <shshaikh@marvell.com>; Ajit Khaparde
> <ajit.khaparde@broadcom.com>; Somnath Kotur
> <somnath.kotur@broadcom.com>; Chas Williams <chas3@att.com>; Wei Hu
> (Xavier) <xavier.huwei@huawei.com>; Rahul Lakkireddy
> <rahul.lakkireddy@chelsio.com>; Hemant Agrawal
> <hemant.agrawal@nxp.com>; Guo, Jia <jia.guo@intel.com>; Wang, Haiyue
> <haiyue.wang@intel.com>; Marcin Wojtas <mw@semihalf.com>; Michal
> Krawczyk <mk@semihalf.com>; Guy Tzalik <gtzalik@amazon.com>; Evgeny
> Schemeilin <evgenys@amazon.com>; Igor Chauskin <igorch@amazon.com>;
> Gagandeep Singh <g.singh@nxp.com>; John Daley <johndale@cisco.com>;
> Hyong Youb Kim <hyonkim@cisco.com>; Gaetan Rivet <grive@u256.net>;
> Wang, Xiao W <xiao.w.wang@intel.com>; Ziyang Xuan
> <xuanziyang2@huawei.com>; Xiaoyun Wang
> <cloud.wangxiaoyun@huawei.com>; Guoyang Zhou
> <zhouguoyang@huawei.com>; Min Hu (Connor) <humin29@huawei.com>;
> Yisen Zhuang <yisen.zhuang@huawei.com>; Xing, Beilei
> <beilei.xing@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>; Yang, Qiming
> <qiming.yang@intel.com>; Alfredo Cardigliano <cardigliano@ntop.org>;
> Shijith Thotton <sthotton@marvell.com>; Srisivasubramanian Srinivasan
> <srinivasan@marvell.com>; Jakub Grajciar <jgrajcia@cisco.com>; Matan
> Azrad <matan@nvidia.com>; Shahaf Shuler <shahafs@nvidia.com>;
> Viacheslav Ovsiienko <viacheslavo@nvidia.com>; Zyta Szpak
> <zr@semihalf.com>; Stephen Hemminger <sthemmin@microsoft.com>; K. Y.
> Srinivasan <kys@microsoft.com>; Haiyang Zhang <haiyangz@microsoft.com>;
> Long Li <longli@microsoft.com>; Martin Spinler <spinler@cesnet.cz>;
> Heinrich Kuhn <heinrich.kuhn@netronome.com>; Harman Kalra
> <hkalra@marvell.com>; Jerin Jacob <jerinj@marvell.com>; Nithin Dabilpuram
> <ndabilpuram@marvell.com>; Kiran Kumar K <kirankumark@marvell.com>;
> Akhil Goyal <akhil.goyal@nxp.com>; Singh, Jasvinder
> <jasvinder.singh@intel.com>; Dumitrescu, Cristian
> <cristian.dumitrescu@intel.com>; Wiles, Keith <keith.wiles@intel.com>;
> Maciej Czekaj <mczekaj@marvell.com>; Maxime Coquelin
> <maxime.coquelin@redhat.com>; Xia, Chenbo <chenbo.xia@intel.com>;
> Wang, Zhihong <zhihong.wang@intel.com>; Yong Wang
> <yongwang@vmware.com>
> Subject: [PATCH v3 02/29] ethdev: allow drivers to return error on close
>
> The device operation .dev_close was returning void.
> This driver interface is changed to return an int.
>
> Note that the API rte_eth_dev_close() is still returning void,
> although a deprecation notice is pending to change it as well.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> Reviewed-by: Rosen Xu <rosen.xu@intel.com>
> Reviewed-by: Sachin Saxena <sachin.saxena@oss.nxp.com>
> Reviewed-by: Liron Himi <lironh@marvell.com>
> ---
> app/test/virtual_pmd.c | 6 ++++--
> drivers/net/af_packet/rte_eth_af_packet.c | 3 ++-
> drivers/net/af_xdp/rte_eth_af_xdp.c | 4 +++-
> drivers/net/ark/ark_ethdev.c | 6 ++++--
> drivers/net/atlantic/atl_ethdev.c | 6 ++++--
> drivers/net/avp/avp_ethdev.c | 5 +++--
> drivers/net/axgbe/axgbe_ethdev.c | 5 +++--
> drivers/net/bnx2x/bnx2x_ethdev.c | 4 +++-
> drivers/net/bnxt/bnxt_ethdev.c | 4 +++-
> drivers/net/bnxt/bnxt_reps.c | 3 ++-
> drivers/net/bnxt/bnxt_reps.h | 2 +-
> drivers/net/bonding/eth_bond_private.h | 2 +-
> drivers/net/bonding/rte_eth_bond_pmd.c | 4 +++-
> drivers/net/cxgbe/cxgbe_ethdev.c | 10 ++++++----
> drivers/net/cxgbe/cxgbe_pfvf.h | 2 +-
> drivers/net/dpaa/dpaa_ethdev.c | 4 +++-
> drivers/net/dpaa2/dpaa2_ethdev.c | 6 ++++--
> drivers/net/e1000/em_ethdev.c | 6 ++++--
> drivers/net/e1000/igb_ethdev.c | 12 ++++++++----
> drivers/net/ena/ena_ethdev.c | 6 ++++--
> drivers/net/enetc/enetc_ethdev.c | 4 +++-
> drivers/net/enic/enic_ethdev.c | 4 +++-
> drivers/net/enic/enic_vf_representor.c | 5 +++--
> drivers/net/failsafe/failsafe_ops.c | 3 ++-
> drivers/net/fm10k/fm10k_ethdev.c | 4 +++-
> drivers/net/hinic/hinic_pmd_ethdev.c | 6 ++++--
> drivers/net/hns3/hns3_ethdev.c | 6 ++++--
> drivers/net/hns3/hns3_ethdev_vf.c | 6 ++++--
> drivers/net/i40e/i40e_ethdev.c | 5 +++--
> drivers/net/i40e/i40e_ethdev_vf.c | 5 +++--
> drivers/net/iavf/iavf_ethdev.c | 6 ++++--
> drivers/net/ice/ice_dcf_ethdev.c | 6 ++++--
> drivers/net/ice/ice_ethdev.c | 6 ++++--
> drivers/net/igc/igc_ethdev.c | 6 ++++--
> drivers/net/ionic/ionic_ethdev.c | 10 ++++++----
> drivers/net/ipn3ke/ipn3ke_representor.c | 4 +++-
> drivers/net/ixgbe/ixgbe_ethdev.c | 11 +++++++----
> drivers/net/kni/rte_eth_kni.c | 4 +++-
> drivers/net/liquidio/lio_ethdev.c | 4 +++-
> drivers/net/memif/rte_eth_memif.c | 4 +++-
> drivers/net/mlx4/mlx4.c | 3 ++-
> drivers/net/mlx5/mlx5.c | 9 +++++----
> drivers/net/mlx5/mlx5.h | 2 +-
> drivers/net/mvneta/mvneta_ethdev.c | 4 +++-
> drivers/net/mvpp2/mrvl_ethdev.c | 4 +++-
> drivers/net/netvsc/hn_ethdev.c | 4 +++-
> drivers/net/nfb/nfb_ethdev.c | 4 +++-
> drivers/net/nfp/nfp_net.c | 6 ++++--
> drivers/net/octeontx/octeontx_ethdev.c | 4 +++-
> drivers/net/octeontx2/otx2_ethdev.c | 5 +++--
> drivers/net/pcap/rte_eth_pcap.c | 3 ++-
> drivers/net/pfe/pfe_ethdev.c | 8 +++++---
> drivers/net/qede/qede_ethdev.c | 4 +++-
> drivers/net/sfc/sfc_ethdev.c | 4 +++-
> drivers/net/softnic/rte_eth_softnic.c | 4 ++--
> drivers/net/szedata2/rte_eth_szedata2.c | 4 +++-
> drivers/net/tap/rte_eth_tap.c | 4 +++-
> drivers/net/thunderx/nicvf_ethdev.c | 4 +++-
> drivers/net/vhost/rte_eth_vhost.c | 6 ++++--
> drivers/net/virtio/virtio_ethdev.c | 6 ++++--
> drivers/net/vmxnet3/vmxnet3_ethdev.c | 6 ++++--
> lib/librte_ethdev/rte_ethdev_driver.h | 2 +-
> 62 files changed, 206 insertions(+), 103 deletions(-)
>
> diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c
> index b49089a33c..4bd4d1c9ad 100644
> --- a/app/test/virtual_pmd.c
> +++ b/app/test/virtual_pmd.c
> @@ -62,9 +62,11 @@ static void virtual_ethdev_stop(struct rte_eth_dev
> *eth_dev __rte_unused)
> rte_pktmbuf_free(pkt);
> }
>
> -static void
> +static int
> virtual_ethdev_close(struct rte_eth_dev *dev __rte_unused)
> -{}
> +{
> + return 0;
> +}
>
> static int
> virtual_ethdev_configure_success(struct rte_eth_dev *dev __rte_unused)
> diff --git a/drivers/net/af_packet/rte_eth_af_packet.c
> b/drivers/net/af_packet/rte_eth_af_packet.c
> index b9723e9619..7d0ff1cbb3 100644
> --- a/drivers/net/af_packet/rte_eth_af_packet.c
> +++ b/drivers/net/af_packet/rte_eth_af_packet.c
> @@ -376,9 +376,10 @@ eth_stats_reset(struct rte_eth_dev *dev)
> return 0;
> }
>
> -static void
> +static int
> eth_dev_close(struct rte_eth_dev *dev __rte_unused)
> {
> + return 0;
> }
>
> static void
> diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c
> b/drivers/net/af_xdp/rte_eth_af_xdp.c
> index b65ee449fc..badbce63fb 100644
> --- a/drivers/net/af_xdp/rte_eth_af_xdp.c
> +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
> @@ -701,7 +701,7 @@ xdp_umem_destroy(struct xsk_umem_info *umem)
> umem = NULL;
> }
>
> -static void
> +static int
> eth_dev_close(struct rte_eth_dev *dev)
> {
> struct pmd_internals *internals = dev->data->dev_private;
> @@ -731,6 +731,8 @@ eth_dev_close(struct rte_eth_dev *dev)
> dev->data->mac_addrs = NULL;
>
> remove_xdp_program(internals);
> +
> + return 0;
> }
>
> static void
> diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c
> index e13415e95b..5f2ed4b7b7 100644
> --- a/drivers/net/ark/ark_ethdev.c
> +++ b/drivers/net/ark/ark_ethdev.c
> @@ -30,7 +30,7 @@ static int eth_ark_dev_uninit(struct rte_eth_dev
> *eth_dev);
> static int eth_ark_dev_configure(struct rte_eth_dev *dev);
> static int eth_ark_dev_start(struct rte_eth_dev *dev);
> static void eth_ark_dev_stop(struct rte_eth_dev *dev);
> -static void eth_ark_dev_close(struct rte_eth_dev *dev);
> +static int eth_ark_dev_close(struct rte_eth_dev *dev);
> static int eth_ark_dev_info_get(struct rte_eth_dev *dev,
> struct rte_eth_dev_info *dev_info);
> static int eth_ark_dev_link_update(struct rte_eth_dev *dev,
> @@ -676,7 +676,7 @@ eth_ark_dev_stop(struct rte_eth_dev *dev)
> }
> }
>
> -static void
> +static int
> eth_ark_dev_close(struct rte_eth_dev *dev)
> {
> struct ark_adapter *ark = dev->data->dev_private;
> @@ -706,6 +706,8 @@ eth_ark_dev_close(struct rte_eth_dev *dev)
>
> rte_free(dev->data->mac_addrs);
> dev->data->mac_addrs = 0;
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/atlantic/atl_ethdev.c
> b/drivers/net/atlantic/atl_ethdev.c
> index 2fca9140d7..254758fd66 100644
> --- a/drivers/net/atlantic/atl_ethdev.c
> +++ b/drivers/net/atlantic/atl_ethdev.c
> @@ -22,7 +22,7 @@ static int atl_dev_start(struct rte_eth_dev *dev);
> static void atl_dev_stop(struct rte_eth_dev *dev);
> static int atl_dev_set_link_up(struct rte_eth_dev *dev);
> static int atl_dev_set_link_down(struct rte_eth_dev *dev);
> -static void atl_dev_close(struct rte_eth_dev *dev);
> +static int atl_dev_close(struct rte_eth_dev *dev);
> static int atl_dev_reset(struct rte_eth_dev *dev);
> static int atl_dev_promiscuous_enable(struct rte_eth_dev *dev);
> static int atl_dev_promiscuous_disable(struct rte_eth_dev *dev);
> @@ -719,7 +719,7 @@ atl_dev_set_link_down(struct rte_eth_dev *dev)
> /*
> * Reset and stop device.
> */
> -static void
> +static int
> atl_dev_close(struct rte_eth_dev *dev)
> {
> PMD_INIT_FUNC_TRACE();
> @@ -727,6 +727,8 @@ atl_dev_close(struct rte_eth_dev *dev)
> atl_dev_stop(dev);
>
> atl_free_queues(dev);
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/avp/avp_ethdev.c b/drivers/net/avp/avp_ethdev.c
> index 5b47f0924a..2eed6acc3f 100644
> --- a/drivers/net/avp/avp_ethdev.c
> +++ b/drivers/net/avp/avp_ethdev.c
> @@ -38,7 +38,7 @@ static int avp_dev_create(struct rte_pci_device
> *pci_dev,
> static int avp_dev_configure(struct rte_eth_dev *dev);
> static int avp_dev_start(struct rte_eth_dev *dev);
> static void avp_dev_stop(struct rte_eth_dev *dev);
> -static void avp_dev_close(struct rte_eth_dev *dev);
> +static int avp_dev_close(struct rte_eth_dev *dev);
> static int avp_dev_info_get(struct rte_eth_dev *dev,
> struct rte_eth_dev_info *dev_info);
> static int avp_vlan_offload_set(struct rte_eth_dev *dev, int mask);
> @@ -2103,7 +2103,7 @@ avp_dev_stop(struct rte_eth_dev *eth_dev)
> rte_spinlock_unlock(&avp->lock);
> }
>
> -static void
> +static int
> avp_dev_close(struct rte_eth_dev *eth_dev)
> {
> struct avp_dev *avp = AVP_DEV_PRIVATE_TO_HW(eth_dev->data-
> >dev_private);
> @@ -2139,6 +2139,7 @@ avp_dev_close(struct rte_eth_dev *eth_dev)
>
> unlock:
> rte_spinlock_unlock(&avp->lock);
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/axgbe/axgbe_ethdev.c
> b/drivers/net/axgbe/axgbe_ethdev.c
> index 4f5a014b54..458d64bcef 100644
> --- a/drivers/net/axgbe/axgbe_ethdev.c
> +++ b/drivers/net/axgbe/axgbe_ethdev.c
> @@ -16,7 +16,7 @@ static int axgbe_dev_configure(struct rte_eth_dev
> *dev);
> static int axgbe_dev_start(struct rte_eth_dev *dev);
> static void axgbe_dev_stop(struct rte_eth_dev *dev);
> static void axgbe_dev_interrupt_handler(void *param);
> -static void axgbe_dev_close(struct rte_eth_dev *dev);
> +static int axgbe_dev_close(struct rte_eth_dev *dev);
> static int axgbe_dev_promiscuous_enable(struct rte_eth_dev *dev);
> static int axgbe_dev_promiscuous_disable(struct rte_eth_dev *dev);
> static int axgbe_dev_allmulticast_enable(struct rte_eth_dev *dev);
> @@ -410,10 +410,11 @@ axgbe_dev_stop(struct rte_eth_dev *dev)
> }
>
> /* Clear all resources like TX/RX queues. */
> -static void
> +static int
> axgbe_dev_close(struct rte_eth_dev *dev)
> {
> axgbe_dev_clear_queues(dev);
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c
> b/drivers/net/bnx2x/bnx2x_ethdev.c
> index b2ea5fafa7..73217c2138 100644
> --- a/drivers/net/bnx2x/bnx2x_ethdev.c
> +++ b/drivers/net/bnx2x/bnx2x_ethdev.c
> @@ -280,7 +280,7 @@ bnx2x_dev_stop(struct rte_eth_dev *dev)
> return;
> }
>
> -static void
> +static int
> bnx2x_dev_close(struct rte_eth_dev *dev)
> {
> struct bnx2x_softc *sc = dev->data->dev_private;
> @@ -295,6 +295,8 @@ bnx2x_dev_close(struct rte_eth_dev *dev)
>
> /* free ilt */
> bnx2x_free_ilt_mem(sc);
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c
> b/drivers/net/bnxt/bnxt_ethdev.c
> index 05e9a6abbf..e726d078ec 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -1357,7 +1357,7 @@ static void bnxt_dev_stop_op(struct rte_eth_dev
> *eth_dev)
> bp->flow_stat->flow_count = 0;
> }
>
> -static void bnxt_dev_close_op(struct rte_eth_dev *eth_dev)
> +static int bnxt_dev_close_op(struct rte_eth_dev *eth_dev)
> {
> struct bnxt *bp = eth_dev->data->dev_private;
>
> @@ -1392,6 +1392,8 @@ static void bnxt_dev_close_op(struct rte_eth_dev
> *eth_dev)
>
> rte_free(bp->grp_info);
> bp->grp_info = NULL;
> +
> + return 0;
> }
>
> static void bnxt_mac_addr_remove_op(struct rte_eth_dev *eth_dev,
> diff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c
> index 17010f1ee2..2b6c0a277b 100644
> --- a/drivers/net/bnxt/bnxt_reps.c
> +++ b/drivers/net/bnxt/bnxt_reps.c
> @@ -457,10 +457,11 @@ void bnxt_vf_rep_dev_stop_op(struct
> rte_eth_dev *eth_dev)
> bnxt_vf_rep_free_rx_mbufs(vfr_bp);
> }
>
> -void bnxt_vf_rep_dev_close_op(struct rte_eth_dev *eth_dev)
> +int bnxt_vf_rep_dev_close_op(struct rte_eth_dev *eth_dev)
> {
> BNXT_TF_DBG(DEBUG, "BNXT Port:%d VFR close\n", eth_dev->data-
> >port_id);
> bnxt_vf_representor_uninit(eth_dev);
> + return 0;
> }
>
> int bnxt_vf_rep_dev_info_get_op(struct rte_eth_dev *eth_dev,
> diff --git a/drivers/net/bnxt/bnxt_reps.h b/drivers/net/bnxt/bnxt_reps.h
> index 3239e03fc0..d9b9ee2757 100644
> --- a/drivers/net/bnxt/bnxt_reps.h
> +++ b/drivers/net/bnxt/bnxt_reps.h
> @@ -45,7 +45,7 @@ int bnxt_vf_rep_tx_queue_setup_op(struct
> rte_eth_dev *eth_dev,
> void bnxt_vf_rep_rx_queue_release_op(void *rx_queue);
> void bnxt_vf_rep_tx_queue_release_op(void *tx_queue);
> void bnxt_vf_rep_dev_stop_op(struct rte_eth_dev *eth_dev);
> -void bnxt_vf_rep_dev_close_op(struct rte_eth_dev *eth_dev);
> +int bnxt_vf_rep_dev_close_op(struct rte_eth_dev *eth_dev);
> int bnxt_vf_rep_stats_get_op(struct rte_eth_dev *eth_dev,
> struct rte_eth_stats *stats);
> int bnxt_vf_rep_stats_reset_op(struct rte_eth_dev *eth_dev);
> diff --git a/drivers/net/bonding/eth_bond_private.h
> b/drivers/net/bonding/eth_bond_private.h
> index c9b2d0fe46..0a0034705d 100644
> --- a/drivers/net/bonding/eth_bond_private.h
> +++ b/drivers/net/bonding/eth_bond_private.h
> @@ -318,7 +318,7 @@ bond_tlb_activate_slave(struct bond_dev_private
> *internals);
> void
> bond_ethdev_stop(struct rte_eth_dev *eth_dev);
>
> -void
> +int
> bond_ethdev_close(struct rte_eth_dev *dev);
>
> #endif
> diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c
> b/drivers/net/bonding/rte_eth_bond_pmd.c
> index 4ffd2ca4bb..dff835ef92 100644
> --- a/drivers/net/bonding/rte_eth_bond_pmd.c
> +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
> @@ -2095,7 +2095,7 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev)
> }
> }
>
> -void
> +int
> bond_ethdev_close(struct rte_eth_dev *dev)
> {
> struct bond_dev_private *internals = dev->data->dev_private;
> @@ -2119,6 +2119,8 @@ bond_ethdev_close(struct rte_eth_dev *dev)
> bond_flow_ops.flush(dev, &ferror);
> bond_ethdev_free_queues(dev);
> rte_bitmap_reset(internals->vlan_filter_bmp);
> +
> + return 0;
> }
>
> /* forward declaration */
> diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c
> b/drivers/net/cxgbe/cxgbe_ethdev.c
> index 422e190daf..e4bbba5c32 100644
> --- a/drivers/net/cxgbe/cxgbe_ethdev.c
> +++ b/drivers/net/cxgbe/cxgbe_ethdev.c
> @@ -318,7 +318,7 @@ int cxgbe_dev_mtu_set(struct rte_eth_dev
> *eth_dev, uint16_t mtu)
> /*
> * Stop device.
> */
> -void cxgbe_dev_close(struct rte_eth_dev *eth_dev)
> +int cxgbe_dev_close(struct rte_eth_dev *eth_dev)
> {
> struct port_info *temp_pi, *pi = eth_dev->data->dev_private;
> struct adapter *adapter = pi->adapter;
> @@ -327,10 +327,10 @@ void cxgbe_dev_close(struct rte_eth_dev
> *eth_dev)
> CXGBE_FUNC_TRACE();
>
> if (!(adapter->flags & FULL_INIT_DONE))
> - return;
> + return 0;
>
> if (!pi->viid)
> - return;
> + return 0;
>
> cxgbe_down(pi);
> t4_sge_eth_release_queues(pi);
> @@ -343,11 +343,13 @@ void cxgbe_dev_close(struct rte_eth_dev
> *eth_dev)
> for_each_port(adapter, i) {
> temp_pi = adap2pinfo(adapter, i);
> if (temp_pi->viid)
> - return;
> + return 0;
> }
>
> cxgbe_close(adapter);
> rte_free(adapter);
> +
> + return 0;
> }
>
> /* Start the device.
> diff --git a/drivers/net/cxgbe/cxgbe_pfvf.h
> b/drivers/net/cxgbe/cxgbe_pfvf.h
> index 0b7c52aecf..69d91639e9 100644
> --- a/drivers/net/cxgbe/cxgbe_pfvf.h
> +++ b/drivers/net/cxgbe/cxgbe_pfvf.h
> @@ -19,7 +19,7 @@
> void cxgbe_dev_rx_queue_release(void *q);
> void cxgbe_dev_tx_queue_release(void *q);
> void cxgbe_dev_stop(struct rte_eth_dev *eth_dev);
> -void cxgbe_dev_close(struct rte_eth_dev *eth_dev);
> +int cxgbe_dev_close(struct rte_eth_dev *eth_dev);
> int cxgbe_dev_info_get(struct rte_eth_dev *eth_dev,
> struct rte_eth_dev_info *device_info);
> int cxgbe_dev_promiscuous_enable(struct rte_eth_dev *eth_dev);
> diff --git a/drivers/net/dpaa/dpaa_ethdev.c
> b/drivers/net/dpaa/dpaa_ethdev.c
> index 8a6b19b5ce..7fe06e1830 100644
> --- a/drivers/net/dpaa/dpaa_ethdev.c
> +++ b/drivers/net/dpaa/dpaa_ethdev.c
> @@ -369,7 +369,7 @@ static void dpaa_eth_dev_stop(struct rte_eth_dev
> *dev)
> dev->tx_pkt_burst = dpaa_eth_tx_drop_all;
> }
>
> -static void dpaa_eth_dev_close(struct rte_eth_dev *dev)
> +static int dpaa_eth_dev_close(struct rte_eth_dev *dev)
> {
> struct fman_if *fif = dev->process_private;
> struct __fman_if *__fif;
> @@ -392,6 +392,8 @@ static void dpaa_eth_dev_close(struct rte_eth_dev
> *dev)
> dpaa_interrupt_handler,
> (void *)dev);
> }
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c
> b/drivers/net/dpaa2/dpaa2_ethdev.c
> index 02daa4d250..fb4165fa03 100644
> --- a/drivers/net/dpaa2/dpaa2_ethdev.c
> +++ b/drivers/net/dpaa2/dpaa2_ethdev.c
> @@ -1236,7 +1236,7 @@ dpaa2_dev_stop(struct rte_eth_dev *dev)
> rte_eth_linkstatus_set(dev, &link);
> }
>
> -static void
> +static int
> dpaa2_dev_close(struct rte_eth_dev *dev)
> {
> struct dpaa2_dev_priv *priv = dev->data->dev_private;
> @@ -1252,11 +1252,13 @@ dpaa2_dev_close(struct rte_eth_dev *dev)
> ret = dpni_reset(dpni, CMD_PRI_LOW, priv->token);
> if (ret) {
> DPAA2_PMD_ERR("Failure cleaning dpni device: err=%d",
> ret);
> - return;
> + return -1;
> }
>
> memset(&link, 0, sizeof(link));
> rte_eth_linkstatus_set(dev, &link);
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/e1000/em_ethdev.c
> b/drivers/net/e1000/em_ethdev.c
> index 1dc360713a..2d0e071448 100644
> --- a/drivers/net/e1000/em_ethdev.c
> +++ b/drivers/net/e1000/em_ethdev.c
> @@ -34,7 +34,7 @@
> static int eth_em_configure(struct rte_eth_dev *dev);
> static int eth_em_start(struct rte_eth_dev *dev);
> static void eth_em_stop(struct rte_eth_dev *dev);
> -static void eth_em_close(struct rte_eth_dev *dev);
> +static int eth_em_close(struct rte_eth_dev *dev);
> static int eth_em_promiscuous_enable(struct rte_eth_dev *dev);
> static int eth_em_promiscuous_disable(struct rte_eth_dev *dev);
> static int eth_em_allmulticast_enable(struct rte_eth_dev *dev);
> @@ -758,7 +758,7 @@ eth_em_stop(struct rte_eth_dev *dev)
> }
> }
>
> -static void
> +static int
> eth_em_close(struct rte_eth_dev *dev)
> {
> struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> @@ -782,6 +782,8 @@ eth_em_close(struct rte_eth_dev *dev)
> rte_intr_disable(intr_handle);
> rte_intr_callback_unregister(intr_handle,
> eth_em_interrupt_handler, dev);
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/e1000/igb_ethdev.c
> b/drivers/net/e1000/igb_ethdev.c
> index 5ab74840aa..9e4aefe00c 100644
> --- a/drivers/net/e1000/igb_ethdev.c
> +++ b/drivers/net/e1000/igb_ethdev.c
> @@ -77,7 +77,7 @@ static int eth_igb_start(struct rte_eth_dev *dev);
> static void eth_igb_stop(struct rte_eth_dev *dev);
> static int eth_igb_dev_set_link_up(struct rte_eth_dev *dev);
> static int eth_igb_dev_set_link_down(struct rte_eth_dev *dev);
> -static void eth_igb_close(struct rte_eth_dev *dev);
> +static int eth_igb_close(struct rte_eth_dev *dev);
> static int eth_igb_reset(struct rte_eth_dev *dev);
> static int eth_igb_promiscuous_enable(struct rte_eth_dev *dev);
> static int eth_igb_promiscuous_disable(struct rte_eth_dev *dev);
> @@ -155,7 +155,7 @@ static void igbvf_intr_disable(struct e1000_hw *hw);
> static int igbvf_dev_configure(struct rte_eth_dev *dev);
> static int igbvf_dev_start(struct rte_eth_dev *dev);
> static void igbvf_dev_stop(struct rte_eth_dev *dev);
> -static void igbvf_dev_close(struct rte_eth_dev *dev);
> +static int igbvf_dev_close(struct rte_eth_dev *dev);
> static int igbvf_promiscuous_enable(struct rte_eth_dev *dev);
> static int igbvf_promiscuous_disable(struct rte_eth_dev *dev);
> static int igbvf_allmulticast_enable(struct rte_eth_dev *dev);
> @@ -1535,7 +1535,7 @@ eth_igb_dev_set_link_down(struct rte_eth_dev
> *dev)
> return 0;
> }
>
> -static void
> +static int
> eth_igb_close(struct rte_eth_dev *dev)
> {
> struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> @@ -1604,6 +1604,8 @@ eth_igb_close(struct rte_eth_dev *dev)
>
> /* clear all the filters list */
> igb_filterlist_flush(dev);
> +
> + return 0;
> }
>
> /*
> @@ -3381,7 +3383,7 @@ igbvf_dev_stop(struct rte_eth_dev *dev)
> adapter->stopped = true;
> }
>
> -static void
> +static int
> igbvf_dev_close(struct rte_eth_dev *dev)
> {
> struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> @@ -3412,6 +3414,8 @@ igbvf_dev_close(struct rte_eth_dev *dev)
> rte_intr_callback_unregister(&pci_dev->intr_handle,
> eth_igbvf_interrupt_handler,
> (void *)dev);
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
> index 8077519735..ae6daad892 100644
> --- a/drivers/net/ena/ena_ethdev.c
> +++ b/drivers/net/ena/ena_ethdev.c
> @@ -187,7 +187,7 @@ static void ena_init_rings(struct ena_adapter
> *adapter,
> static int ena_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);
> static int ena_start(struct rte_eth_dev *dev);
> static void ena_stop(struct rte_eth_dev *dev);
> -static void ena_close(struct rte_eth_dev *dev);
> +static int ena_close(struct rte_eth_dev *dev);
> static int ena_dev_reset(struct rte_eth_dev *dev);
> static int ena_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats
> *stats);
> static void ena_rx_queue_release_all(struct rte_eth_dev *dev);
> @@ -487,7 +487,7 @@ static void ena_config_debug_area(struct
> ena_adapter *adapter)
> ena_com_delete_debug_area(&adapter->ena_dev);
> }
>
> -static void ena_close(struct rte_eth_dev *dev)
> +static int ena_close(struct rte_eth_dev *dev)
> {
> struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
> struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
> @@ -513,6 +513,8 @@ static void ena_close(struct rte_eth_dev *dev)
> * release of the resource in the rte_eth_dev_release_port().
> */
> dev->data->mac_addrs = NULL;
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/enetc/enetc_ethdev.c
> b/drivers/net/enetc/enetc_ethdev.c
> index c6fb42740d..bdb32762ce 100644
> --- a/drivers/net/enetc/enetc_ethdev.c
> +++ b/drivers/net/enetc/enetc_ethdev.c
> @@ -545,7 +545,7 @@ enetc_stats_reset(struct rte_eth_dev *dev)
> return 0;
> }
>
> -static void
> +static int
> enetc_dev_close(struct rte_eth_dev *dev)
> {
> uint16_t i;
> @@ -564,6 +564,8 @@ enetc_dev_close(struct rte_eth_dev *dev)
> dev->data->tx_queues[i] = NULL;
> }
> dev->data->nb_tx_queues = 0;
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c
> index 57e82845a4..ed03d53608 100644
> --- a/drivers/net/enic/enic_ethdev.c
> +++ b/drivers/net/enic/enic_ethdev.c
> @@ -446,12 +446,14 @@ static void enicpmd_dev_stop(struct rte_eth_dev
> *eth_dev)
> /*
> * Stop device.
> */
> -static void enicpmd_dev_close(struct rte_eth_dev *eth_dev)
> +static int enicpmd_dev_close(struct rte_eth_dev *eth_dev)
> {
> struct enic *enic = pmd_priv(eth_dev);
>
> ENICPMD_FUNC_TRACE();
> enic_remove(enic);
> +
> + return 0;
> }
>
> static int enicpmd_dev_link_update(struct rte_eth_dev *eth_dev,
> diff --git a/drivers/net/enic/enic_vf_representor.c
> b/drivers/net/enic/enic_vf_representor.c
> index 5d34e1b460..c528be2b98 100644
> --- a/drivers/net/enic/enic_vf_representor.c
> +++ b/drivers/net/enic/enic_vf_representor.c
> @@ -277,11 +277,12 @@ static void enic_vf_dev_stop(struct rte_eth_dev
> *eth_dev)
> * "close" is no-op for now and solely exists so that rte_eth_dev_close()
> * can finish its own cleanup without errors.
> */
> -static void enic_vf_dev_close(struct rte_eth_dev *eth_dev __rte_unused)
> +static int enic_vf_dev_close(struct rte_eth_dev *eth_dev __rte_unused)
> {
> ENICPMD_FUNC_TRACE();
> if (rte_eal_process_type() != RTE_PROC_PRIMARY)
> - return;
> + return 0;
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/failsafe/failsafe_ops.c
> b/drivers/net/failsafe/failsafe_ops.c
> index 96f7e456f9..93ebd09114 100644
> --- a/drivers/net/failsafe/failsafe_ops.c
> +++ b/drivers/net/failsafe/failsafe_ops.c
> @@ -240,7 +240,7 @@ fs_dev_set_link_down(struct rte_eth_dev *dev)
> }
>
> static void fs_dev_free_queues(struct rte_eth_dev *dev);
> -static void
> +static int
> fs_dev_close(struct rte_eth_dev *dev)
> {
> struct sub_device *sdev;
> @@ -259,6 +259,7 @@ fs_dev_close(struct rte_eth_dev *dev)
> }
> fs_dev_free_queues(dev);
> fs_unlock(dev, 0);
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/fm10k/fm10k_ethdev.c
> b/drivers/net/fm10k/fm10k_ethdev.c
> index 5771d83b55..533f976709 100644
> --- a/drivers/net/fm10k/fm10k_ethdev.c
> +++ b/drivers/net/fm10k/fm10k_ethdev.c
> @@ -2776,7 +2776,7 @@ fm10k_close_mbx_service(struct fm10k_hw *hw)
> hw->mbx.ops.disconnect(hw, &hw->mbx);
> }
>
> -static void
> +static int
> fm10k_dev_close(struct rte_eth_dev *dev)
> {
> struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> @@ -2821,6 +2821,8 @@ fm10k_dev_close(struct rte_eth_dev *dev)
> rte_intr_callback_unregister(intr_handle,
> fm10k_dev_interrupt_handler_vf, (void *)dev);
> }
> +
> + return 0;
> }
>
> static const struct eth_dev_ops fm10k_eth_dev_ops = {
> diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c
> b/drivers/net/hinic/hinic_pmd_ethdev.c
> index 67e6afcf7a..5f2e97d3bd 100644
> --- a/drivers/net/hinic/hinic_pmd_ethdev.c
> +++ b/drivers/net/hinic/hinic_pmd_ethdev.c
> @@ -2936,7 +2936,7 @@ static void hinic_nic_dev_destroy(struct
> rte_eth_dev *eth_dev)
> * @param dev
> * Pointer to Ethernet device structure.
> */
> -static void hinic_dev_close(struct rte_eth_dev *dev)
> +static int hinic_dev_close(struct rte_eth_dev *dev)
> {
> struct hinic_nic_dev *nic_dev =
> HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
>
> @@ -2944,7 +2944,7 @@ static void hinic_dev_close(struct rte_eth_dev
> *dev)
> &nic_dev->dev_status)) {
> PMD_DRV_LOG(WARNING, "Device %s already closed",
> dev->data->name);
> - return;
> + return 0;
> }
>
> /* stop device first */
> @@ -2971,6 +2971,8 @@ static void hinic_dev_close(struct rte_eth_dev
> *dev)
>
> /* deinit nic hardware device */
> hinic_nic_dev_destroy(dev);
> +
> + return 0;
> }
>
> static const struct eth_dev_ops hinic_pmd_ops = {
> diff --git a/drivers/net/hns3/hns3_ethdev.c
> b/drivers/net/hns3/hns3_ethdev.c
> index 73d504253d..3b395a1ccf 100644
> --- a/drivers/net/hns3/hns3_ethdev.c
> +++ b/drivers/net/hns3/hns3_ethdev.c
> @@ -4859,7 +4859,7 @@ hns3_dev_stop(struct rte_eth_dev *dev)
> rte_spinlock_unlock(&hw->lock);
> }
>
> -static void
> +static int
> hns3_dev_close(struct rte_eth_dev *eth_dev)
> {
> struct hns3_adapter *hns = eth_dev->data->dev_private;
> @@ -4868,7 +4868,7 @@ hns3_dev_close(struct rte_eth_dev *eth_dev)
> if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
> rte_free(eth_dev->process_private);
> eth_dev->process_private = NULL;
> - return;
> + return 0;
> }
>
> if (hw->adapter_state == HNS3_NIC_STARTED)
> @@ -4888,6 +4888,8 @@ hns3_dev_close(struct rte_eth_dev *eth_dev)
> eth_dev->process_private = NULL;
> hns3_mp_uninit_primary();
> hns3_warn(hw, "Close port %d finished", hw->data->port_id);
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/hns3/hns3_ethdev_vf.c
> b/drivers/net/hns3/hns3_ethdev_vf.c
> index 037a5be7e0..e0ca5a6ac2 100644
> --- a/drivers/net/hns3/hns3_ethdev_vf.c
> +++ b/drivers/net/hns3/hns3_ethdev_vf.c
> @@ -1910,14 +1910,14 @@ hns3vf_dev_stop(struct rte_eth_dev *dev)
> rte_spinlock_unlock(&hw->lock);
> }
>
> -static void
> +static int
> hns3vf_dev_close(struct rte_eth_dev *eth_dev)
> {
> struct hns3_adapter *hns = eth_dev->data->dev_private;
> struct hns3_hw *hw = &hns->hw;
>
> if (rte_eal_process_type() != RTE_PROC_PRIMARY)
> - return;
> + return 0;
>
> if (hw->adapter_state == HNS3_NIC_STARTED)
> hns3vf_dev_stop(eth_dev);
> @@ -1935,6 +1935,8 @@ hns3vf_dev_close(struct rte_eth_dev *eth_dev)
> eth_dev->process_private = NULL;
> hns3_mp_uninit_primary();
> hns3_warn(hw, "Close port %d finished", hw->data->port_id);
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index 563f21d9df..804f0128ab 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -225,7 +225,7 @@ static int eth_i40e_dev_uninit(struct rte_eth_dev
> *eth_dev);
> static int i40e_dev_configure(struct rte_eth_dev *dev);
> static int i40e_dev_start(struct rte_eth_dev *dev);
> static void i40e_dev_stop(struct rte_eth_dev *dev);
> -static void i40e_dev_close(struct rte_eth_dev *dev);
> +static int i40e_dev_close(struct rte_eth_dev *dev);
> static int i40e_dev_reset(struct rte_eth_dev *dev);
> static int i40e_dev_promiscuous_enable(struct rte_eth_dev *dev);
> static int i40e_dev_promiscuous_disable(struct rte_eth_dev *dev);
> @@ -2608,7 +2608,7 @@ i40e_dev_stop(struct rte_eth_dev *dev)
> pf->adapter->rss_reta_updated = 0;
> }
>
> -static void
> +static int
> i40e_dev_close(struct rte_eth_dev *dev)
> {
> struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data-
> >dev_private);
> @@ -2748,6 +2748,7 @@ i40e_dev_close(struct rte_eth_dev *dev)
> i40e_tm_conf_uninit(dev);
>
> hw->adapter_closed = 1;
> + return 0;
> }
>
> /*
> diff --git a/drivers/net/i40e/i40e_ethdev_vf.c
> b/drivers/net/i40e/i40e_ethdev_vf.c
> index 8531cf6b12..61aad8c415 100644
> --- a/drivers/net/i40e/i40e_ethdev_vf.c
> +++ b/drivers/net/i40e/i40e_ethdev_vf.c
> @@ -90,7 +90,7 @@ static int i40evf_dev_xstats_reset(struct rte_eth_dev
> *dev);
> static int i40evf_vlan_filter_set(struct rte_eth_dev *dev,
> uint16_t vlan_id, int on);
> static int i40evf_vlan_offload_set(struct rte_eth_dev *dev, int mask);
> -static void i40evf_dev_close(struct rte_eth_dev *dev);
> +static int i40evf_dev_close(struct rte_eth_dev *dev);
> static int i40evf_dev_reset(struct rte_eth_dev *dev);
> static int i40evf_check_vf_reset_done(struct rte_eth_dev *dev);
> static int i40evf_dev_promiscuous_enable(struct rte_eth_dev *dev);
> @@ -2401,7 +2401,7 @@ i40evf_dev_stats_get(struct rte_eth_dev *dev,
> struct rte_eth_stats *stats)
> return ret;
> }
>
> -static void
> +static int
> i40evf_dev_close(struct rte_eth_dev *dev)
> {
> struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> @@ -2433,6 +2433,7 @@ i40evf_dev_close(struct rte_eth_dev *dev)
> vf->aq_resp = NULL;
>
> hw->adapter_closed = 1;
> + return 0;
> }
>
> /*
> diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
> index 440da7d76a..8f46c4588f 100644
> --- a/drivers/net/iavf/iavf_ethdev.c
> +++ b/drivers/net/iavf/iavf_ethdev.c
> @@ -32,7 +32,7 @@
> static int iavf_dev_configure(struct rte_eth_dev *dev);
> static int iavf_dev_start(struct rte_eth_dev *dev);
> static void iavf_dev_stop(struct rte_eth_dev *dev);
> -static void iavf_dev_close(struct rte_eth_dev *dev);
> +static int iavf_dev_close(struct rte_eth_dev *dev);
> static int iavf_dev_reset(struct rte_eth_dev *dev);
> static int iavf_dev_info_get(struct rte_eth_dev *dev,
> struct rte_eth_dev_info *dev_info);
> @@ -1463,7 +1463,7 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)
> return 0;
> }
>
> -static void
> +static int
> iavf_dev_close(struct rte_eth_dev *dev)
> {
> struct iavf_hw *hw = IAVF_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> @@ -1506,6 +1506,8 @@ iavf_dev_close(struct rte_eth_dev *dev)
>
> rte_free(vf->aq_resp);
> vf->aq_resp = NULL;
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/ice/ice_dcf_ethdev.c
> b/drivers/net/ice/ice_dcf_ethdev.c
> index 2faed3cc7a..5b626cb641 100644
> --- a/drivers/net/ice/ice_dcf_ethdev.c
> +++ b/drivers/net/ice/ice_dcf_ethdev.c
> @@ -847,13 +847,13 @@ ice_dcf_stats_reset(struct rte_eth_dev *dev)
> return 0;
> }
>
> -static void
> +static int
> ice_dcf_dev_close(struct rte_eth_dev *dev)
> {
> struct ice_dcf_adapter *adapter = dev->data->dev_private;
>
> if (rte_eal_process_type() != RTE_PROC_PRIMARY)
> - return;
> + return 0;
>
> dev->dev_ops = NULL;
> dev->rx_pkt_burst = NULL;
> @@ -861,6 +861,8 @@ ice_dcf_dev_close(struct rte_eth_dev *dev)
>
> ice_dcf_uninit_parent_adapter(dev);
> ice_dcf_uninit_hw(dev, &adapter->real_hw);
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
> index cfd357b055..b4ac5e3f81 100644
> --- a/drivers/net/ice/ice_ethdev.c
> +++ b/drivers/net/ice/ice_ethdev.c
> @@ -77,7 +77,7 @@ static struct proto_xtr_ol_flag
> ice_proto_xtr_ol_flag_params[] = {
> static int ice_dev_configure(struct rte_eth_dev *dev);
> static int ice_dev_start(struct rte_eth_dev *dev);
> static void ice_dev_stop(struct rte_eth_dev *dev);
> -static void ice_dev_close(struct rte_eth_dev *dev);
> +static int ice_dev_close(struct rte_eth_dev *dev);
> static int ice_dev_reset(struct rte_eth_dev *dev);
> static int ice_dev_info_get(struct rte_eth_dev *dev,
> struct rte_eth_dev_info *dev_info);
> @@ -2430,7 +2430,7 @@ ice_dev_stop(struct rte_eth_dev *dev)
> pf->adapter_stopped = true;
> }
>
> -static void
> +static int
> ice_dev_close(struct rte_eth_dev *dev)
> {
> struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data-
> >dev_private);
> @@ -2478,6 +2478,8 @@ ice_dev_close(struct rte_eth_dev *dev)
> /* unregister callback func from eal lib */
> rte_intr_callback_unregister(intr_handle,
> ice_interrupt_handler, dev);
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c
> index 810568bc54..11397c5c1d 100644
> --- a/drivers/net/igc/igc_ethdev.c
> +++ b/drivers/net/igc/igc_ethdev.c
> @@ -183,7 +183,7 @@ static void eth_igc_stop(struct rte_eth_dev *dev);
> static int eth_igc_start(struct rte_eth_dev *dev);
> static int eth_igc_set_link_up(struct rte_eth_dev *dev);
> static int eth_igc_set_link_down(struct rte_eth_dev *dev);
> -static void eth_igc_close(struct rte_eth_dev *dev);
> +static int eth_igc_close(struct rte_eth_dev *dev);
> static int eth_igc_reset(struct rte_eth_dev *dev);
> static int eth_igc_promiscuous_enable(struct rte_eth_dev *dev);
> static int eth_igc_promiscuous_disable(struct rte_eth_dev *dev);
> @@ -1165,7 +1165,7 @@ igc_dev_free_queues(struct rte_eth_dev *dev)
> dev->data->nb_tx_queues = 0;
> }
>
> -static void
> +static int
> eth_igc_close(struct rte_eth_dev *dev)
> {
> struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
> @@ -1199,6 +1199,8 @@ eth_igc_close(struct rte_eth_dev *dev)
>
> /* Reset any pending lock */
> igc_reset_swfw_lock(hw);
> +
> + return 0;
> }
>
> static void
> diff --git a/drivers/net/ionic/ionic_ethdev.c
> b/drivers/net/ionic/ionic_ethdev.c
> index 800f6e5d64..1775fd29b7 100644
> --- a/drivers/net/ionic/ionic_ethdev.c
> +++ b/drivers/net/ionic/ionic_ethdev.c
> @@ -25,7 +25,7 @@ static int ionic_dev_configure(struct rte_eth_dev *dev);
> static int ionic_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);
> static int ionic_dev_start(struct rte_eth_dev *dev);
> static void ionic_dev_stop(struct rte_eth_dev *dev);
> -static void ionic_dev_close(struct rte_eth_dev *dev);
> +static int ionic_dev_close(struct rte_eth_dev *dev);
> static int ionic_dev_set_link_up(struct rte_eth_dev *dev);
> static int ionic_dev_set_link_down(struct rte_eth_dev *dev);
> static int ionic_dev_link_update(struct rte_eth_dev *eth_dev,
> @@ -956,7 +956,7 @@ ionic_dev_stop(struct rte_eth_dev *eth_dev)
> /*
> * Reset and stop device.
> */
> -static void
> +static int
> ionic_dev_close(struct rte_eth_dev *eth_dev)
> {
> struct ionic_lif *lif = IONIC_ETH_DEV_TO_LIF(eth_dev);
> @@ -967,14 +967,16 @@ ionic_dev_close(struct rte_eth_dev *eth_dev)
> err = ionic_lif_stop(lif);
> if (err) {
> IONIC_PRINT(ERR, "Cannot stop LIF: %d", err);
> - return;
> + return -1;
> }
>
> err = eth_ionic_dev_uninit(eth_dev);
> if (err) {
> IONIC_PRINT(ERR, "Cannot destroy LIF: %d", err);
> - return;
> + return -1;
> }
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c
> b/drivers/net/ipn3ke/ipn3ke_representor.c
> index b673c49149..d49abbf758 100644
> --- a/drivers/net/ipn3ke/ipn3ke_representor.c
> +++ b/drivers/net/ipn3ke/ipn3ke_representor.c
> @@ -208,7 +208,7 @@ ipn3ke_rpst_dev_stop(struct rte_eth_dev *dev)
> }
> }
>
> -static void
> +static int
> ipn3ke_rpst_dev_close(struct rte_eth_dev *dev)
> {
> struct ipn3ke_hw *hw = IPN3KE_DEV_PRIVATE_TO_HW(dev);
> @@ -221,6 +221,8 @@ ipn3ke_rpst_dev_close(struct rte_eth_dev *dev)
> /* Disable the RX path */
> ipn3ke_xmac_rx_disable(hw, rpst->port_id, 0);
> }
> +
> + return 0;
> }
>
> /*
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> b/drivers/net/ixgbe/ixgbe_ethdev.c
> index c74467e068..5a863ca4bf 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> @@ -147,7 +147,7 @@ static int ixgbe_dev_start(struct rte_eth_dev *dev);
> static void ixgbe_dev_stop(struct rte_eth_dev *dev);
> static int ixgbe_dev_set_link_up(struct rte_eth_dev *dev);
> static int ixgbe_dev_set_link_down(struct rte_eth_dev *dev);
> -static void ixgbe_dev_close(struct rte_eth_dev *dev);
> +static int ixgbe_dev_close(struct rte_eth_dev *dev);
> static int ixgbe_dev_reset(struct rte_eth_dev *dev);
> static int ixgbe_dev_promiscuous_enable(struct rte_eth_dev *dev);
> static int ixgbe_dev_promiscuous_disable(struct rte_eth_dev *dev);
> @@ -251,7 +251,7 @@ static int ixgbevf_dev_start(struct rte_eth_dev *dev);
> static int ixgbevf_dev_link_update(struct rte_eth_dev *dev,
> int wait_to_complete);
> static void ixgbevf_dev_stop(struct rte_eth_dev *dev);
> -static void ixgbevf_dev_close(struct rte_eth_dev *dev);
> +static int ixgbevf_dev_close(struct rte_eth_dev *dev);
> static int ixgbevf_dev_reset(struct rte_eth_dev *dev);
> static void ixgbevf_intr_disable(struct rte_eth_dev *dev);
> static void ixgbevf_intr_enable(struct rte_eth_dev *dev);
> @@ -2994,7 +2994,7 @@ ixgbe_dev_set_link_down(struct rte_eth_dev
> *dev)
> /*
> * Reset and stop device.
> */
> -static void
> +static int
> ixgbe_dev_close(struct rte_eth_dev *dev)
> {
> struct ixgbe_hw *hw =
> @@ -3065,6 +3065,7 @@ ixgbe_dev_close(struct rte_eth_dev *dev)
> rte_free(dev->security_ctx);
> #endif
>
> + return 0;
> }
>
> /*
> @@ -5443,7 +5444,7 @@ ixgbevf_dev_stop(struct rte_eth_dev *dev)
> adapter->rss_reta_updated = 0;
> }
>
> -static void
> +static int
> ixgbevf_dev_close(struct rte_eth_dev *dev)
> {
> struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> @@ -5472,6 +5473,8 @@ ixgbevf_dev_close(struct rte_eth_dev *dev)
> rte_intr_disable(intr_handle);
> rte_intr_callback_unregister(intr_handle,
> ixgbevf_dev_interrupt_handler, dev);
> +
> + return 0;
> }
>
> /*
> diff --git a/drivers/net/kni/rte_eth_kni.c b/drivers/net/kni/rte_eth_kni.c
> index 831fe96c96..aa365a57de 100644
> --- a/drivers/net/kni/rte_eth_kni.c
> +++ b/drivers/net/kni/rte_eth_kni.c
> @@ -198,7 +198,7 @@ eth_kni_dev_stop(struct rte_eth_dev *dev)
> dev->data->dev_link.link_status = 0;
> }
>
> -static void
> +static int
> eth_kni_close(struct rte_eth_dev *eth_dev)
> {
> struct pmd_internals *internals;
> @@ -214,6 +214,8 @@ eth_kni_close(struct rte_eth_dev *eth_dev)
> if (ret)
> PMD_LOG(WARNING, "Not able to release kni for %s",
> eth_dev->data->name);
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/liquidio/lio_ethdev.c
> b/drivers/net/liquidio/lio_ethdev.c
> index 2c2b27e62a..93e2ed5670 100644
> --- a/drivers/net/liquidio/lio_ethdev.c
> +++ b/drivers/net/liquidio/lio_ethdev.c
> @@ -1550,7 +1550,7 @@ lio_dev_set_link_down(struct rte_eth_dev
> *eth_dev)
> * @return
> * - nothing
> */
> -static void
> +static int
> lio_dev_close(struct rte_eth_dev *eth_dev)
> {
> struct lio_device *lio_dev = LIO_DEV(eth_dev);
> @@ -1581,6 +1581,8 @@ lio_dev_close(struct rte_eth_dev *eth_dev)
>
> /* Delete all queues */
> lio_dev_clear_queues(eth_dev);
> +
> + return 0;
> }
>
> /**
> diff --git a/drivers/net/memif/rte_eth_memif.c
> b/drivers/net/memif/rte_eth_memif.c
> index a19c0f3e6b..1a2411c838 100644
> --- a/drivers/net/memif/rte_eth_memif.c
> +++ b/drivers/net/memif/rte_eth_memif.c
> @@ -1218,7 +1218,7 @@ memif_dev_start(struct rte_eth_dev *dev)
> return ret;
> }
>
> -static void
> +static int
> memif_dev_close(struct rte_eth_dev *dev)
> {
> struct pmd_internals *pmd = dev->data->dev_private;
> @@ -1239,6 +1239,8 @@ memif_dev_close(struct rte_eth_dev *dev)
> }
>
> rte_free(dev->process_private);
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c
> index 71061a720f..df59314b66 100644
> --- a/drivers/net/mlx4/mlx4.c
> +++ b/drivers/net/mlx4/mlx4.c
> @@ -370,7 +370,7 @@ mlx4_dev_stop(struct rte_eth_dev *dev)
> * @param dev
> * Pointer to Ethernet device structure.
> */
> -static void
> +static int
> mlx4_dev_close(struct rte_eth_dev *dev)
> {
> struct mlx4_priv *priv = dev->data->dev_private;
> @@ -400,6 +400,7 @@ mlx4_dev_close(struct rte_eth_dev *dev)
> MLX4_ASSERT(priv->ctx == NULL);
> mlx4_intr_uninstall(priv);
> memset(priv, 0, sizeof(*priv));
> + return 0;
> }
>
> static const struct eth_dev_ops mlx4_dev_ops = {
> diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
> index 4a807fb4fd..01ead6e6af 100644
> --- a/drivers/net/mlx5/mlx5.c
> +++ b/drivers/net/mlx5/mlx5.c
> @@ -1341,7 +1341,7 @@ mlx5_proc_priv_uninit(struct rte_eth_dev *dev)
> * @param dev
> * Pointer to Ethernet device structure.
> */
> -void
> +int
> mlx5_dev_close(struct rte_eth_dev *dev)
> {
> struct mlx5_priv *priv = dev->data->dev_private;
> @@ -1351,14 +1351,14 @@ mlx5_dev_close(struct rte_eth_dev *dev)
> if (rte_eal_process_type() == RTE_PROC_SECONDARY) {
> /* Check if process_private released. */
> if (!dev->process_private)
> - return;
> + return 0;
> mlx5_tx_uar_uninit_secondary(dev);
> mlx5_proc_priv_uninit(dev);
> rte_eth_dev_release_port(dev);
> - return;
> + return 0;
> }
> if (!priv->sh)
> - return;
> + return 0;
> DRV_LOG(DEBUG, "port %u closing device \"%s\"",
> dev->data->port_id,
> ((priv->sh->ctx != NULL) ?
> @@ -1479,6 +1479,7 @@ mlx5_dev_close(struct rte_eth_dev *dev)
> * it is freed when dev_private is freed.
> */
> dev->data->mac_addrs = NULL;
> + return 0;
> }
>
> /**
> diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
> index 865e72d318..56f0e25b4c 100644
> --- a/drivers/net/mlx5/mlx5.h
> +++ b/drivers/net/mlx5/mlx5.h
> @@ -842,7 +842,7 @@ int mlx5_proc_priv_init(struct rte_eth_dev *dev);
> int mlx5_udp_tunnel_port_add(struct rte_eth_dev *dev,
> struct rte_eth_udp_tunnel *udp_tunnel);
> uint16_t mlx5_eth_find_next(uint16_t port_id, struct rte_pci_device
> *pci_dev);
> -void mlx5_dev_close(struct rte_eth_dev *dev);
> +int mlx5_dev_close(struct rte_eth_dev *dev);
>
> /* Macro to iterate over all valid ports for mlx5 driver. */
> #define MLX5_ETH_FOREACH_DEV(port_id, pci_dev) \
> diff --git a/drivers/net/mvneta/mvneta_ethdev.c
> b/drivers/net/mvneta/mvneta_ethdev.c
> index 5bf3ebc4bd..eebcdb840e 100644
> --- a/drivers/net/mvneta/mvneta_ethdev.c
> +++ b/drivers/net/mvneta/mvneta_ethdev.c
> @@ -429,7 +429,7 @@ mvneta_dev_stop(struct rte_eth_dev *dev)
> * @param dev
> * Pointer to Ethernet device structure.
> */
> -static void
> +static int
> mvneta_dev_close(struct rte_eth_dev *dev)
> {
> struct mvneta_priv *priv = dev->data->dev_private;
> @@ -455,6 +455,8 @@ mvneta_dev_close(struct rte_eth_dev *dev)
> mvneta_neta_deinit();
> rte_mvep_deinit(MVEP_MOD_T_NETA);
> }
> +
> + return 0;
> }
>
> /**
> diff --git a/drivers/net/mvpp2/mrvl_ethdev.c
> b/drivers/net/mvpp2/mrvl_ethdev.c
> index f5e77d07bf..27f7cfb056 100644
> --- a/drivers/net/mvpp2/mrvl_ethdev.c
> +++ b/drivers/net/mvpp2/mrvl_ethdev.c
> @@ -855,7 +855,7 @@ mrvl_dev_stop(struct rte_eth_dev *dev)
> * @param dev
> * Pointer to Ethernet device structure.
> */
> -static void
> +static int
> mrvl_dev_close(struct rte_eth_dev *dev)
> {
> struct mrvl_priv *priv = dev->data->dev_private;
> @@ -915,6 +915,8 @@ mrvl_dev_close(struct rte_eth_dev *dev)
> mrvl_deinit_pp2();
> rte_mvep_deinit(MVEP_MOD_T_PP2);
> }
> +
> + return 0;
> }
>
> /**
> diff --git a/drivers/net/netvsc/hn_ethdev.c
> b/drivers/net/netvsc/hn_ethdev.c
> index 229c1b9149..8968036ea3 100644
> --- a/drivers/net/netvsc/hn_ethdev.c
> +++ b/drivers/net/netvsc/hn_ethdev.c
> @@ -841,13 +841,15 @@ hn_dev_stop(struct rte_eth_dev *dev)
> hn_vf_stop(dev);
> }
>
> -static void
> +static int
> hn_dev_close(struct rte_eth_dev *dev)
> {
> PMD_INIT_FUNC_TRACE();
>
> hn_vf_close(dev);
> hn_dev_free_queues(dev);
> +
> + return 0;
> }
>
> static const struct eth_dev_ops hn_eth_dev_ops = {
> diff --git a/drivers/net/nfb/nfb_ethdev.c b/drivers/net/nfb/nfb_ethdev.c
> index b039ab6fc2..c3c3d003f1 100644
> --- a/drivers/net/nfb/nfb_ethdev.c
> +++ b/drivers/net/nfb/nfb_ethdev.c
> @@ -209,7 +209,7 @@ nfb_eth_dev_info(struct rte_eth_dev *dev,
> * @param dev
> * Pointer to Ethernet device structure.
> */
> -static void
> +static int
> nfb_eth_dev_close(struct rte_eth_dev *dev)
> {
> struct pmd_internals *internals = dev->data->dev_private;
> @@ -235,6 +235,8 @@ nfb_eth_dev_close(struct rte_eth_dev *dev)
>
> rte_free(dev->data->mac_addrs);
> dev->data->mac_addrs = NULL;
> +
> + return 0;
> }
>
> /**
> diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c
> index f5e4cd339d..9509dc8bd6 100644
> --- a/drivers/net/nfp/nfp_net.c
> +++ b/drivers/net/nfp/nfp_net.c
> @@ -50,7 +50,7 @@
> #include <errno.h>
>
> /* Prototypes */
> -static void nfp_net_close(struct rte_eth_dev *dev);
> +static int nfp_net_close(struct rte_eth_dev *dev);
> static int nfp_net_configure(struct rte_eth_dev *dev);
> static void nfp_net_dev_interrupt_handler(void *param);
> static void nfp_net_dev_interrupt_delayed_handler(void *param);
> @@ -864,7 +864,7 @@ nfp_net_set_link_down(struct rte_eth_dev *dev)
> }
>
> /* Reset and stop device. The device can not be restarted. */
> -static void
> +static int
> nfp_net_close(struct rte_eth_dev *dev)
> {
> struct nfp_net_hw *hw;
> @@ -906,6 +906,8 @@ nfp_net_close(struct rte_eth_dev *dev)
> * The ixgbe PMD driver disables the pcie master on the
> * device. The i40e does not...
> */
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/octeontx/octeontx_ethdev.c
> b/drivers/net/octeontx/octeontx_ethdev.c
> index ff2e22cd44..10eeeac642 100644
> --- a/drivers/net/octeontx/octeontx_ethdev.c
> +++ b/drivers/net/octeontx/octeontx_ethdev.c
> @@ -478,7 +478,7 @@ octeontx_dev_configure(struct rte_eth_dev *dev)
> return 0;
> }
>
> -static void
> +static int
> octeontx_dev_close(struct rte_eth_dev *dev)
> {
> struct octeontx_txq *txq = NULL;
> @@ -517,6 +517,8 @@ octeontx_dev_close(struct rte_eth_dev *dev)
>
> dev->tx_pkt_burst = NULL;
> dev->rx_pkt_burst = NULL;
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/octeontx2/otx2_ethdev.c
> b/drivers/net/octeontx2/otx2_ethdev.c
> index 51a6f99877..abe5f03628 100644
> --- a/drivers/net/octeontx2/otx2_ethdev.c
> +++ b/drivers/net/octeontx2/otx2_ethdev.c
> @@ -2222,7 +2222,7 @@ otx2_nix_dev_start(struct rte_eth_dev *eth_dev)
> }
>
> static int otx2_nix_dev_reset(struct rte_eth_dev *eth_dev);
> -static void otx2_nix_dev_close(struct rte_eth_dev *eth_dev);
> +static int otx2_nix_dev_close(struct rte_eth_dev *eth_dev);
>
> /* Initialize and register driver with DPDK Application */
> static const struct eth_dev_ops otx2_eth_dev_ops = {
> @@ -2635,10 +2635,11 @@ otx2_eth_dev_uninit(struct rte_eth_dev
> *eth_dev, bool mbox_close)
> return 0;
> }
>
> -static void
> +static int
> otx2_nix_dev_close(struct rte_eth_dev *eth_dev)
> {
> otx2_eth_dev_uninit(eth_dev, true);
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/pcap/rte_eth_pcap.c
> b/drivers/net/pcap/rte_eth_pcap.c
> index 668cbd1fc7..76e704a65a 100644
> --- a/drivers/net/pcap/rte_eth_pcap.c
> +++ b/drivers/net/pcap/rte_eth_pcap.c
> @@ -728,7 +728,7 @@ eth_stats_reset(struct rte_eth_dev *dev)
> return 0;
> }
>
> -static void
> +static int
> eth_dev_close(struct rte_eth_dev *dev)
> {
> unsigned int i;
> @@ -748,6 +748,7 @@ eth_dev_close(struct rte_eth_dev *dev)
> }
> }
>
> + return 0;
> }
>
> static void
> diff --git a/drivers/net/pfe/pfe_ethdev.c b/drivers/net/pfe/pfe_ethdev.c
> index 97356d2b0b..187a0019ff 100644
> --- a/drivers/net/pfe/pfe_ethdev.c
> +++ b/drivers/net/pfe/pfe_ethdev.c
> @@ -398,14 +398,14 @@ pfe_eth_exit(struct rte_eth_dev *dev, struct pfe
> *pfe)
> pfe->nb_devs--;
> }
>
> -static void
> +static int
> pfe_eth_close(struct rte_eth_dev *dev)
> {
> if (!dev)
> - return;
> + return -1;
>
> if (!g_pfe)
> - return;
> + return -1;
>
> pfe_eth_exit(dev, g_pfe);
>
> @@ -415,6 +415,8 @@ pfe_eth_close(struct rte_eth_dev *dev)
> rte_free(g_pfe);
> g_pfe = NULL;
> }
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/qede/qede_ethdev.c
> b/drivers/net/qede/qede_ethdev.c
> index 59f1746ee9..9535df183f 100644
> --- a/drivers/net/qede/qede_ethdev.c
> +++ b/drivers/net/qede/qede_ethdev.c
> @@ -1542,7 +1542,7 @@ static void qede_poll_sp_sb_cb(void *param)
> }
> }
>
> -static void qede_dev_close(struct rte_eth_dev *eth_dev)
> +static int qede_dev_close(struct rte_eth_dev *eth_dev)
> {
> struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
> struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
> @@ -1586,6 +1586,8 @@ static void qede_dev_close(struct rte_eth_dev
> *eth_dev)
>
> if (ECORE_IS_CMT(edev))
> rte_eal_alarm_cancel(qede_poll_sp_sb_cb, (void
> *)eth_dev);
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
> index 1a58e0df84..eaa48627d6 100644
> --- a/drivers/net/sfc/sfc_ethdev.c
> +++ b/drivers/net/sfc/sfc_ethdev.c
> @@ -318,7 +318,7 @@ sfc_dev_set_link_down(struct rte_eth_dev *dev)
> return 0;
> }
>
> -static void
> +static int
> sfc_dev_close(struct rte_eth_dev *dev)
> {
> struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
> @@ -364,6 +364,8 @@ sfc_dev_close(struct rte_eth_dev *dev)
>
> dev->process_private = NULL;
> free(sa);
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/softnic/rte_eth_softnic.c
> b/drivers/net/softnic/rte_eth_softnic.c
> index e453fd1486..038abd98da 100644
> --- a/drivers/net/softnic/rte_eth_softnic.c
> +++ b/drivers/net/softnic/rte_eth_softnic.c
> @@ -201,10 +201,10 @@ pmd_dev_stop(struct rte_eth_dev *dev)
> softnic_mtr_free(p);
> }
>
> -static void
> +static int
> pmd_dev_close(struct rte_eth_dev *dev __rte_unused)
> {
> - return;
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/szedata2/rte_eth_szedata2.c
> b/drivers/net/szedata2/rte_eth_szedata2.c
> index a17c53577c..daa40cfd6c 100644
> --- a/drivers/net/szedata2/rte_eth_szedata2.c
> +++ b/drivers/net/szedata2/rte_eth_szedata2.c
> @@ -1155,7 +1155,7 @@ eth_tx_queue_release(void *q)
> }
> }
>
> -static void
> +static int
> eth_dev_close(struct rte_eth_dev *dev)
> {
> struct pmd_internals *internals = dev->data->dev_private;
> @@ -1180,6 +1180,8 @@ eth_dev_close(struct rte_eth_dev *dev)
>
> rte_free(dev->data->mac_addrs);
> dev->data->mac_addrs = NULL;
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
> index df16aa4ea7..2d1e4e365a 100644
> --- a/drivers/net/tap/rte_eth_tap.c
> +++ b/drivers/net/tap/rte_eth_tap.c
> @@ -1067,7 +1067,7 @@ tap_stats_reset(struct rte_eth_dev *dev)
> return 0;
> }
>
> -static void
> +static int
> tap_dev_close(struct rte_eth_dev *dev)
> {
> int i;
> @@ -1116,6 +1116,8 @@ tap_dev_close(struct rte_eth_dev *dev)
> * Since TUN device has no more opened file descriptors
> * it will be removed from kernel
> */
> +
> + return 0;
> }
>
> static void
> diff --git a/drivers/net/thunderx/nicvf_ethdev.c
> b/drivers/net/thunderx/nicvf_ethdev.c
> index 83d9488360..3d7348771a 100644
> --- a/drivers/net/thunderx/nicvf_ethdev.c
> +++ b/drivers/net/thunderx/nicvf_ethdev.c
> @@ -1852,7 +1852,7 @@ nicvf_vf_stop(struct rte_eth_dev *dev, struct nicvf
> *nic, bool cleanup)
> }
> }
>
> -static void
> +static int
> nicvf_dev_close(struct rte_eth_dev *dev)
> {
> size_t i;
> @@ -1869,6 +1869,8 @@ nicvf_dev_close(struct rte_eth_dev *dev)
>
> nicvf_periodic_alarm_stop(nicvf_vf_interrupt, nic->snicvf[i]);
> }
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/vhost/rte_eth_vhost.c
> b/drivers/net/vhost/rte_eth_vhost.c
> index ce32be9ce3..f67f4db812 100644
> --- a/drivers/net/vhost/rte_eth_vhost.c
> +++ b/drivers/net/vhost/rte_eth_vhost.c
> @@ -1164,7 +1164,7 @@ eth_dev_stop(struct rte_eth_dev *dev)
> update_queuing_status(dev);
> }
>
> -static void
> +static int
> eth_dev_close(struct rte_eth_dev *dev)
> {
> struct pmd_internal *internal;
> @@ -1173,7 +1173,7 @@ eth_dev_close(struct rte_eth_dev *dev)
>
> internal = dev->data->dev_private;
> if (!internal)
> - return;
> + return 0;
>
> eth_dev_stop(dev);
>
> @@ -1201,6 +1201,8 @@ eth_dev_close(struct rte_eth_dev *dev)
>
> rte_free(vring_states[dev->data->port_id]);
> vring_states[dev->data->port_id] = NULL;
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/virtio/virtio_ethdev.c
> b/drivers/net/virtio/virtio_ethdev.c
> index 013a2904e6..0787337a01 100644
> --- a/drivers/net/virtio/virtio_ethdev.c
> +++ b/drivers/net/virtio/virtio_ethdev.c
> @@ -704,7 +704,7 @@ virtio_alloc_queues(struct rte_eth_dev *dev)
>
> static void virtio_queues_unbind_intr(struct rte_eth_dev *dev);
>
> -static void
> +static int
> virtio_dev_close(struct rte_eth_dev *dev)
> {
> struct virtio_hw *hw = dev->data->dev_private;
> @@ -713,7 +713,7 @@ virtio_dev_close(struct rte_eth_dev *dev)
> PMD_INIT_LOG(DEBUG, "virtio_dev_close");
>
> if (!hw->opened)
> - return;
> + return 0;
> hw->opened = false;
>
> /* reset the NIC */
> @@ -743,6 +743,8 @@ virtio_dev_close(struct rte_eth_dev *dev)
> if (!hw->modern)
> rte_pci_ioport_unmap(VTPCI_IO(hw));
> }
> +
> + return 0;
> }
>
> static int
> diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c
> b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> index fa80e75a5b..17fed0ed6e 100644
> --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
> +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> @@ -64,7 +64,7 @@ static int eth_vmxnet3_dev_uninit(struct rte_eth_dev
> *eth_dev);
> static int vmxnet3_dev_configure(struct rte_eth_dev *dev);
> static int vmxnet3_dev_start(struct rte_eth_dev *dev);
> static void vmxnet3_dev_stop(struct rte_eth_dev *dev);
> -static void vmxnet3_dev_close(struct rte_eth_dev *dev);
> +static int vmxnet3_dev_close(struct rte_eth_dev *dev);
> static void vmxnet3_dev_set_rxmode(struct vmxnet3_hw *hw, uint32_t
> feature, int set);
> static int vmxnet3_dev_promiscuous_enable(struct rte_eth_dev *dev);
> static int vmxnet3_dev_promiscuous_disable(struct rte_eth_dev *dev);
> @@ -888,13 +888,15 @@ vmxnet3_free_queues(struct rte_eth_dev *dev)
> /*
> * Reset and stop device.
> */
> -static void
> +static int
> vmxnet3_dev_close(struct rte_eth_dev *dev)
> {
> PMD_INIT_FUNC_TRACE();
>
> vmxnet3_dev_stop(dev);
> vmxnet3_free_queues(dev);
> +
> + return 0;
> }
>
> static void
> diff --git a/lib/librte_ethdev/rte_ethdev_driver.h
> b/lib/librte_ethdev/rte_ethdev_driver.h
> index 04ac8e923c..c3062c246c 100644
> --- a/lib/librte_ethdev/rte_ethdev_driver.h
> +++ b/lib/librte_ethdev/rte_ethdev_driver.h
> @@ -42,7 +42,7 @@ typedef int (*eth_dev_set_link_up_t)(struct
> rte_eth_dev *dev);
> typedef int (*eth_dev_set_link_down_t)(struct rte_eth_dev *dev);
> /**< @internal Function used to link down a configured Ethernet device. */
>
> -typedef void (*eth_dev_close_t)(struct rte_eth_dev *dev);
> +typedef int (*eth_dev_close_t)(struct rte_eth_dev *dev);
> /**< @internal Function used to close a configured Ethernet device. */
>
> typedef int (*eth_dev_reset_t)(struct rte_eth_dev *dev);
> --
> 2.28.0
next prev parent reply other threads:[~2020-09-29 5:56 UTC|newest]
Thread overview: 201+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-13 22:06 [dpdk-dev] [PATCH 00/20] cleanup ethdev close operation Thomas Monjalon
2020-09-13 22:06 ` [dpdk-dev] [PATCH 01/20] ethdev: reset device and interrupt pointers on release Thomas Monjalon
2020-09-23 16:41 ` Ferruh Yigit
2020-09-13 22:06 ` [dpdk-dev] [PATCH 02/20] ethdev: allow drivers to return error on close Thomas Monjalon
2020-09-23 16:41 ` Ferruh Yigit
2020-09-23 20:53 ` Thomas Monjalon
2020-09-23 21:02 ` Stephen Hemminger
2020-09-23 21:06 ` Thomas Monjalon
2020-09-23 21:47 ` Stephen Hemminger
2020-09-23 21:52 ` Thomas Monjalon
2020-09-23 22:02 ` Stephen Hemminger
2020-09-23 22:35 ` Thomas Monjalon
2020-09-24 9:12 ` Bruce Richardson
2020-09-24 10:07 ` Thomas Monjalon
2020-09-24 12:09 ` Ferruh Yigit
2020-09-24 14:48 ` Stephen Hemminger
2020-09-13 22:06 ` [dpdk-dev] [PATCH 03/20] net/af_packet: release port upon close Thomas Monjalon
2020-09-23 16:41 ` Ferruh Yigit
2020-09-13 22:06 ` [dpdk-dev] [PATCH 04/20] net/atlantic: " Thomas Monjalon
2020-09-16 15:14 ` Igor Russkikh
2020-09-23 16:42 ` Ferruh Yigit
2020-09-23 20:50 ` Thomas Monjalon
2020-09-13 22:06 ` [dpdk-dev] [PATCH 05/20] net/axgbe: " Thomas Monjalon
2020-09-13 22:06 ` [dpdk-dev] [PATCH 06/20] net/bonding: " Thomas Monjalon
2020-09-13 22:06 ` [dpdk-dev] [PATCH 07/20] net/failsafe: " Thomas Monjalon
2020-09-23 21:24 ` Thomas Monjalon
2020-09-13 22:06 ` [dpdk-dev] [PATCH 08/20] net/iavf: " Thomas Monjalon
2020-09-13 22:07 ` [dpdk-dev] [PATCH 09/20] net/mlx4: " Thomas Monjalon
2020-09-13 22:07 ` [dpdk-dev] [PATCH 10/20] net/null: " Thomas Monjalon
2020-09-23 16:44 ` Ferruh Yigit
2020-09-23 20:47 ` Thomas Monjalon
2020-09-24 21:58 ` Thomas Monjalon
2020-09-25 8:52 ` Ferruh Yigit
2020-09-25 13:13 ` Thomas Monjalon
2020-09-13 22:07 ` [dpdk-dev] [PATCH 11/20] net/octeontx: " Thomas Monjalon
2020-09-13 22:07 ` [dpdk-dev] [PATCH 12/20] net/pcap: " Thomas Monjalon
2020-09-23 16:44 ` Ferruh Yigit
2020-09-23 20:44 ` Thomas Monjalon
2020-09-24 11:56 ` Ferruh Yigit
2020-09-13 22:07 ` [dpdk-dev] [PATCH 13/20] net/ring: " Thomas Monjalon
2020-09-14 8:51 ` Bruce Richardson
2020-09-13 22:07 ` [dpdk-dev] [PATCH 14/20] net/softnic: " Thomas Monjalon
2020-09-14 15:21 ` Dumitrescu, Cristian
2020-09-13 22:07 ` [dpdk-dev] [PATCH 15/20] net/tap: " Thomas Monjalon
2020-09-13 22:07 ` [dpdk-dev] [PATCH 16/20] ethdev: remove old close behaviour Thomas Monjalon
2020-09-23 16:44 ` Ferruh Yigit
2020-09-23 20:41 ` Thomas Monjalon
2020-09-24 12:00 ` Ferruh Yigit
2020-09-25 4:31 ` Rasesh Mody
2020-09-13 22:07 ` [dpdk-dev] [PATCH 17/20] drivers/net: accept removing device without any port Thomas Monjalon
2020-09-23 16:45 ` Ferruh Yigit
2020-09-27 6:25 ` Xu, Rosen
2020-09-13 22:07 ` [dpdk-dev] [PATCH 18/20] drivers/net: remove redundant MAC addresses freeing Thomas Monjalon
2020-09-23 16:45 ` Ferruh Yigit
2020-09-13 22:07 ` [dpdk-dev] [PATCH 19/20] app/testpmd: reset port status on close notification Thomas Monjalon
2020-09-23 16:45 ` Ferruh Yigit
2020-09-23 20:32 ` Thomas Monjalon
2020-09-24 12:07 ` Ferruh Yigit
2020-09-24 12:17 ` Thomas Monjalon
2020-09-24 13:06 ` Ferruh Yigit
2020-09-13 22:07 ` [dpdk-dev] [PATCH 20/20] app/testpmd: align behaviour of multi-port detach Thomas Monjalon
2020-09-23 16:44 ` [dpdk-dev] [PATCH 00/20] cleanup ethdev close operation Ferruh Yigit
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 00/25] " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 01/25] ethdev: reset device and interrupt pointers on release Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 02/25] ethdev: allow drivers to return error on close Thomas Monjalon
2020-09-28 0:46 ` Xu, Rosen
2020-09-28 9:51 ` Sachin Saxena (OSS)
2020-09-28 18:26 ` [dpdk-dev] [EXT] " Liron Himi
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 03/25] net/af_packet: release port upon close Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 04/25] net/atlantic: " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 05/25] net/axgbe: " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 06/25] net/bnx2x: " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 07/25] net/bonding: " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 08/25] net/failsafe: " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 09/25] net/mlx4: " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 10/25] net/null: " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 11/25] net/octeontx: " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 12/25] net/pcap: " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 13/25] net/qede: " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 14/25] net/ring: " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 15/25] net/softnic: " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 16/25] net/tap: " Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 17/25] ethdev: remove old close behaviour Thomas Monjalon
2020-09-28 18:25 ` [dpdk-dev] [EXT] " Liron Himi
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 18/25] drivers/net: accept removing device without any port Thomas Monjalon
2020-09-28 0:47 ` Xu, Rosen
2020-09-28 9:54 ` Sachin Saxena (OSS)
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 19/25] drivers/net: check process type in close operation Thomas Monjalon
2020-09-27 23:52 ` Thomas Monjalon
2020-09-28 0:50 ` Xu, Rosen
2020-09-28 9:55 ` Sachin Saxena (OSS)
2020-09-28 14:57 ` Ajit Khaparde
2020-09-28 18:25 ` [dpdk-dev] [EXT] " Liron Himi
2020-09-28 18:51 ` [dpdk-dev] " Stephen Hemminger
2020-09-28 20:57 ` Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 20/25] drivers/net: remove redundant MAC addresses freeing Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 21/25] app/testpmd: reset port status on close notification Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 22/25] app/testpmd: align behaviour of multi-port detach Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 23/25] ethdev: remove forcing stopped state upon close Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 24/25] ethdev: reset all when releasing a port Thomas Monjalon
2020-09-27 23:42 ` [dpdk-dev] [PATCH v2 25/25] ethdev: allow close function to return an error Thomas Monjalon
2020-09-28 18:24 ` [dpdk-dev] [EXT] " Liron Himi
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 00/29] cleanup ethdev close operation Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 01/29] ethdev: reset device and interrupt pointers on release Thomas Monjalon
2020-09-29 10:52 ` Andrew Rybchenko
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 02/29] ethdev: allow drivers to return error on close Thomas Monjalon
2020-09-29 2:16 ` Wang, Haiyue
2020-09-29 5:56 ` Guo, Jia [this message]
2020-09-29 10:53 ` Andrew Rybchenko
2020-09-30 12:12 ` Ferruh Yigit
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 03/29] net/af_packet: release port upon close Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 04/29] net/atlantic: " Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 05/29] net/axgbe: " Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 06/29] net/bnx2x: " Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 07/29] net/bonding: " Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 08/29] net/dpaa: " Thomas Monjalon
2020-09-29 4:53 ` Hemant Agrawal
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 09/29] net/dpaa2: " Thomas Monjalon
2020-09-29 4:53 ` Hemant Agrawal
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 10/29] net/enetc: " Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 11/29] net/failsafe: " Thomas Monjalon
2020-10-05 10:19 ` Gaëtan Rivet
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 12/29] net/mlx4: " Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 13/29] net/null: " Thomas Monjalon
2020-09-29 16:47 ` Ferruh Yigit
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 14/29] net/octeontx: " Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 15/29] net/pcap: " Thomas Monjalon
2020-09-29 16:49 ` Ferruh Yigit
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 16/29] net/pfe: " Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 17/29] net/qede: " Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 18/29] net/ring: " Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 19/29] net/softnic: " Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 20/29] net/tap: " Thomas Monjalon
2020-09-30 8:34 ` wangyunjian
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 21/29] ethdev: remove old close behaviour Thomas Monjalon
2020-09-29 2:27 ` Wang, Haiyue
2020-09-29 5:55 ` Guo, Jia
2020-09-29 10:38 ` Andrew Rybchenko
2020-09-29 17:08 ` Ferruh Yigit
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 22/29] drivers/net: accept removing device without any port Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 23/29] drivers/net: check process type in close operation Thomas Monjalon
2020-09-29 2:39 ` Wang, Haiyue
2020-09-29 5:53 ` Guo, Jia
2020-09-29 10:42 ` Andrew Rybchenko
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 24/29] drivers/net: remove redundant MAC addresses freeing Thomas Monjalon
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 25/29] app/testpmd: reset port status on close notification Thomas Monjalon
2020-09-30 12:15 ` Ferruh Yigit
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 26/29] app/testpmd: align behaviour of multi-port detach Thomas Monjalon
2020-09-30 12:17 ` Ferruh Yigit
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 27/29] ethdev: remove forcing stopped state upon close Thomas Monjalon
2020-09-29 10:44 ` Andrew Rybchenko
2020-09-29 16:01 ` Ferruh Yigit
2020-09-29 16:06 ` Thomas Monjalon
2020-09-29 16:39 ` Ferruh Yigit
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 28/29] ethdev: reset all when releasing a port Thomas Monjalon
2020-09-29 2:34 ` Wang, Haiyue
2020-09-29 5:51 ` Guo, Jia
2020-09-29 10:26 ` Maxime Coquelin
2020-09-29 10:36 ` Thomas Monjalon
2020-09-29 11:58 ` Wang, Haiyue
2020-09-29 15:50 ` Ferruh Yigit
2020-09-29 16:02 ` Thomas Monjalon
2020-09-29 16:35 ` Ferruh Yigit
2020-09-30 12:17 ` Ferruh Yigit
2020-09-29 10:50 ` Andrew Rybchenko
2020-09-28 23:14 ` [dpdk-dev] [PATCH v3 29/29] ethdev: allow close function to return an error Thomas Monjalon
2020-09-29 11:05 ` Andrew Rybchenko
2020-09-29 11:47 ` Thomas Monjalon
2020-09-29 11:54 ` Andrew Rybchenko
2020-09-28 23:33 ` [dpdk-dev] [PATCH v3 00/29] cleanup ethdev close operation Stephen Hemminger
2020-09-30 12:22 ` Ferruh Yigit
2020-10-05 17:08 ` [dpdk-dev] [PATCH v4 0/3] " Thomas Monjalon
2020-10-05 17:08 ` [dpdk-dev] [PATCH v4 1/3] ethdev: remove forcing stopped state upon close Thomas Monjalon
2020-10-05 17:08 ` [dpdk-dev] [PATCH v4 2/3] ethdev: reset all when releasing a port Thomas Monjalon
2020-10-05 17:08 ` [dpdk-dev] [PATCH v4 3/3] ethdev: allow close function to return an error Thomas Monjalon
2020-10-06 9:43 ` Ferruh Yigit
2020-10-06 10:57 ` Thomas Monjalon
2020-10-13 8:40 ` Andrew Rybchenko
2020-10-13 8:55 ` Thomas Monjalon
2020-10-13 9:33 ` Ferruh Yigit
2020-10-13 10:06 ` [dpdk-dev] [PATCH v5 0/3] cleanup ethdev close operation Thomas Monjalon
2020-10-13 10:06 ` [dpdk-dev] [PATCH v5 1/3] ethdev: remove forcing stopped state upon close Thomas Monjalon
2020-10-13 12:36 ` Ferruh Yigit
2020-10-13 12:49 ` Thomas Monjalon
2020-10-13 12:45 ` Ferruh Yigit
2020-10-13 12:51 ` Thomas Monjalon
2020-10-13 17:54 ` Ferruh Yigit
2020-10-13 17:59 ` Thomas Monjalon
2020-10-13 10:06 ` [dpdk-dev] [PATCH v5 2/3] ethdev: reset all when releasing a port Thomas Monjalon
2020-10-13 13:10 ` Ferruh Yigit
2020-10-13 10:06 ` [dpdk-dev] [PATCH v5 3/3] ethdev: allow close function to return an error Thomas Monjalon
2020-10-13 10:41 ` Andrew Rybchenko
2020-10-13 10:43 ` Thomas Monjalon
2020-10-13 13:10 ` Ferruh Yigit
2020-10-16 13:32 ` [dpdk-dev] [PATCH v6 0/3] cleanup ethdev close operation Thomas Monjalon
2020-10-16 13:32 ` [dpdk-dev] [PATCH v6 1/3] ethdev: remove forcing stopped state upon close Thomas Monjalon
2020-10-16 13:32 ` [dpdk-dev] [PATCH v6 2/3] ethdev: reset all when releasing a port Thomas Monjalon
2020-10-16 15:21 ` Ajit Khaparde
2020-10-16 13:32 ` [dpdk-dev] [PATCH v6 3/3] ethdev: allow close function to return an error Thomas Monjalon
2020-10-16 17:55 ` [dpdk-dev] [PATCH v6 0/3] cleanup ethdev close operation Ferruh Yigit
2020-10-20 12:24 ` Bruce Richardson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1c50bda2343945b38680cbbc00f2859c@intel.com \
--to=jia.guo@intel.com \
--cc=ajit.khaparde@broadcom.com \
--cc=akhil.goyal@nxp.com \
--cc=arybchenko@solarflare.com \
--cc=asomalap@amd.com \
--cc=beilei.xing@intel.com \
--cc=cardigliano@ntop.org \
--cc=chas3@att.com \
--cc=chenbo.xia@intel.com \
--cc=ciara.loftus@intel.com \
--cc=cloud.wangxiaoyun@huawei.com \
--cc=cristian.dumitrescu@intel.com \
--cc=dev@dpdk.org \
--cc=ed.czeck@atomicrules.com \
--cc=evgenys@amazon.com \
--cc=ferruh.yigit@intel.com \
--cc=g.singh@nxp.com \
--cc=grive@u256.net \
--cc=gtzalik@amazon.com \
--cc=haiyangz@microsoft.com \
--cc=haiyue.wang@intel.com \
--cc=heinrich.kuhn@netronome.com \
--cc=hemant.agrawal@nxp.com \
--cc=hkalra@marvell.com \
--cc=humin29@huawei.com \
--cc=hyonkim@cisco.com \
--cc=igor.russkikh@aquantia.com \
--cc=igorch@amazon.com \
--cc=jasvinder.singh@intel.com \
--cc=jerinj@marvell.com \
--cc=jgrajcia@cisco.com \
--cc=jingjing.wu@intel.com \
--cc=john.miller@atomicrules.com \
--cc=johndale@cisco.com \
--cc=keith.wiles@intel.com \
--cc=kirankumark@marvell.com \
--cc=kys@microsoft.com \
--cc=linville@tuxdriver.com \
--cc=lironh@marvell.com \
--cc=longli@microsoft.com \
--cc=matan@nvidia.com \
--cc=matt.peters@windriver.com \
--cc=maxime.coquelin@redhat.com \
--cc=mczekaj@marvell.com \
--cc=mk@semihalf.com \
--cc=mw@semihalf.com \
--cc=ndabilpuram@marvell.com \
--cc=pavel.belous@aquantia.com \
--cc=qi.z.zhang@intel.com \
--cc=qiming.yang@intel.com \
--cc=rahul.lakkireddy@chelsio.com \
--cc=rmody@marvell.com \
--cc=rosen.xu@intel.com \
--cc=sachin.saxena@oss.nxp.com \
--cc=shahafs@nvidia.com \
--cc=shepard.siegel@atomicrules.com \
--cc=shshaikh@marvell.com \
--cc=somnath.kotur@broadcom.com \
--cc=spinler@cesnet.cz \
--cc=srinivasan@marvell.com \
--cc=steven.webster@windriver.com \
--cc=sthemmin@microsoft.com \
--cc=sthotton@marvell.com \
--cc=thomas@monjalon.net \
--cc=viacheslavo@nvidia.com \
--cc=xavier.huwei@huawei.com \
--cc=xiao.w.wang@intel.com \
--cc=xuanziyang2@huawei.com \
--cc=yisen.zhuang@huawei.com \
--cc=yongwang@vmware.com \
--cc=zhihong.wang@intel.com \
--cc=zhouguoyang@huawei.com \
--cc=zr@semihalf.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).