All of lore.kernel.org
 help / color / mirror / Atom feed
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


  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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.