[v3,21/29] ethdev: remove old close behaviour

Message ID 20200928231437.414489-22-thomas@monjalon.net (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series cleanup ethdev close operation |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Thomas Monjalon Sept. 28, 2020, 11:14 p.m. UTC
  The temporary flag RTE_ETH_DEV_CLOSE_REMOVE is removed.
It was introduced in DPDK 18.11 in order to give time for PMDs to migrate.

The old behaviour was to free only queues when closing a port.
The new behaviour is calling rte_eth_dev_release_port() which does
three more tasks:
	- trigger event callback
	- reset state and few pointers
	- free all generic port resources

The private port resources must be released in the .dev_close callback.

The .remove callback should:
	- call .dev_close callback
	- call rte_eth_dev_release_port()
	- free multi-port device shared resources

Despite waiting two years, some drivers have not migrated,
so they may hit issues with the incompatible new behaviour.
After sending emails, adding logs, and announcing the deprecation,
the only last solution is to declare these drivers as unmaintained:
	ionic, liquidio, nfp
Below is a summary of what to implement in those drivers.

* The freeing of private port resources must be moved
from the ".remove(device)" function to the ".dev_close(port)" function.

* If a generic resource (.mac_addrs or .hash_mac_addrs) cannot be freed,
it must be set to NULL in ".dev_close" function to protect from
subsequent rte_eth_dev_release_port() freeing.

* Note 1:
The generic resources are freed in rte_eth_dev_release_port(),
after ".dev_close" is called in rte_eth_dev_close(), but not when
calling ".dev_close" directly from the ".remove" PMD function.
That's why rte_eth_dev_release_port() must still be called explicitly
from ".remove(device)" after calling the ".dev_close" PMD function.

* Note 2:
If a device can have multiple ports, the common resources must be freed
only in the ".remove(device)" function.

* Note 3:
The port is supposed to be in a stopped state when it is closed.
If it is not the case, it is free to the PMD implementation
how to react when trying to close a non-stopped port:
either try to stop it automatically or just return an error.

Cc: Shijith Thotton <sthotton@marvell.com>
Cc: Srisivasubramanian Srinivasan <srinivasan@marvell.com>
Cc: Heinrich Kuhn <heinrich.kuhn@netronome.com>
Cc: Alfredo Cardigliano <cardigliano@ntop.org>

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: Liron Himi <lironh@marvell.com>
---
 MAINTAINERS                               |  6 +++---
 doc/guides/rel_notes/deprecation.rst      |  6 ------
 drivers/net/af_packet/rte_eth_af_packet.c |  1 -
 drivers/net/af_xdp/rte_eth_af_xdp.c       |  2 --
 drivers/net/ark/ark_ethdev.c              |  2 --
 drivers/net/atlantic/atl_ethdev.c         |  2 --
 drivers/net/avp/avp_ethdev.c              |  2 --
 drivers/net/axgbe/axgbe_ethdev.c          |  1 -
 drivers/net/bnx2x/bnx2x_ethdev.c          |  5 -----
 drivers/net/bnxt/bnxt_ethdev.c            |  5 -----
 drivers/net/bnxt/bnxt_reps.c              |  4 ----
 drivers/net/bonding/rte_eth_bond_pmd.c    |  1 -
 drivers/net/cxgbe/cxgbe_main.c            |  2 --
 drivers/net/cxgbe/cxgbevf_main.c          |  2 --
 drivers/net/dpaa/dpaa_ethdev.c            |  1 -
 drivers/net/dpaa2/dpaa2_ethdev.c          |  1 -
 drivers/net/e1000/em_ethdev.c             |  5 -----
 drivers/net/e1000/igb_ethdev.c            | 10 ----------
 drivers/net/ena/ena_ethdev.c              |  6 ------
 drivers/net/enetc/enetc_ethdev.c          |  1 -
 drivers/net/enic/enic_ethdev.c            |  2 --
 drivers/net/enic/enic_vf_representor.c    |  3 +--
 drivers/net/failsafe/failsafe.c           |  1 -
 drivers/net/fm10k/fm10k_ethdev.c          |  5 -----
 drivers/net/hinic/hinic_pmd_ethdev.c      |  6 ------
 drivers/net/hns3/hns3_ethdev.c            |  5 -----
 drivers/net/hns3/hns3_ethdev_vf.c         |  5 -----
 drivers/net/i40e/i40e_ethdev.c            |  5 -----
 drivers/net/i40e/i40e_ethdev_vf.c         |  5 -----
 drivers/net/iavf/iavf_ethdev.c            |  5 -----
 drivers/net/ice/ice_dcf_ethdev.c          |  2 --
 drivers/net/ice/ice_ethdev.c              |  5 -----
 drivers/net/igc/igc_ethdev.c              |  5 -----
 drivers/net/ixgbe/ixgbe_ethdev.c          | 10 ----------
 drivers/net/kni/rte_eth_kni.c             |  2 --
 drivers/net/memif/rte_eth_memif.c         |  3 ---
 drivers/net/mlx4/mlx4.c                   |  1 -
 drivers/net/mlx5/linux/mlx5_os.c          |  2 --
 drivers/net/mvneta/mvneta_ethdev.c        |  3 ---
 drivers/net/mvpp2/mrvl_ethdev.c           |  3 ---
 drivers/net/netvsc/hn_ethdev.c            |  3 ---
 drivers/net/nfb/nfb_ethdev.c              |  3 ---
 drivers/net/null/rte_eth_null.c           |  1 -
 drivers/net/octeontx/octeontx_ethdev.c    |  1 -
 drivers/net/octeontx2/otx2_ethdev.c       |  1 -
 drivers/net/pcap/rte_eth_pcap.c           |  1 -
 drivers/net/pfe/pfe_ethdev.c              |  2 --
 drivers/net/qede/qede_ethdev.c            |  5 -----
 drivers/net/ring/rte_eth_ring.c           |  1 -
 drivers/net/sfc/sfc_ethdev.c              |  4 +---
 drivers/net/softnic/rte_eth_softnic.c     |  1 -
 drivers/net/szedata2/rte_eth_szedata2.c   |  3 ---
 drivers/net/tap/rte_eth_tap.c             |  2 +-
 drivers/net/vhost/rte_eth_vhost.c         |  2 +-
 drivers/net/virtio/virtio_ethdev.c        |  5 -----
 drivers/net/vmxnet3/vmxnet3_ethdev.c      |  3 ---
 lib/librte_ethdev/rte_ethdev.c            | 17 +----------------
 lib/librte_ethdev/rte_ethdev.h            |  8 +-------
 58 files changed, 9 insertions(+), 197 deletions(-)
  

Comments

Wang, Haiyue Sept. 29, 2020, 2:27 a.m. UTC | #1
> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Tuesday, September 29, 2020 07:14
> To: dev@dpdk.org
> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; arybchenko@solarflare.com; Shijith Thotton
> <sthotton@marvell.com>; Srisivasubramanian Srinivasan <srinivasan@marvell.com>; Heinrich Kuhn
> <heinrich.kuhn@netronome.com>; Alfredo Cardigliano <cardigliano@ntop.org>; Liron Himi
> <lironh@marvell.com>; Ray Kinsella <mdr@ashroe.eu>; Neil Horman <nhorman@tuxdriver.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>; Sachin Saxena
> <sachin.saxena@oss.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>; 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>; Tetsuya Mukawa
> <mtetsuyah@gmail.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>; Richardson, Bruce <bruce.richardson@intel.com>; Singh, Jasvinder
> <jasvinder.singh@intel.com>; Dumitrescu, Cristian <cristian.dumitrescu@intel.com>; Wiles, Keith
> <keith.wiles@intel.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 21/29] ethdev: remove old close behaviour
> 
> The temporary flag RTE_ETH_DEV_CLOSE_REMOVE is removed.
> It was introduced in DPDK 18.11 in order to give time for PMDs to migrate.
> 
> The old behaviour was to free only queues when closing a port.
> The new behaviour is calling rte_eth_dev_release_port() which does
> three more tasks:
> 	- trigger event callback
> 	- reset state and few pointers
> 	- free all generic port resources
> 
> The private port resources must be released in the .dev_close callback.
> 
> The .remove callback should:
> 	- call .dev_close callback
> 	- call rte_eth_dev_release_port()
> 	- free multi-port device shared resources
> 
> Despite waiting two years, some drivers have not migrated,
> so they may hit issues with the incompatible new behaviour.
> After sending emails, adding logs, and announcing the deprecation,
> the only last solution is to declare these drivers as unmaintained:
> 	ionic, liquidio, nfp
> Below is a summary of what to implement in those drivers.
> 
> * The freeing of private port resources must be moved
> from the ".remove(device)" function to the ".dev_close(port)" function.
> 
> * If a generic resource (.mac_addrs or .hash_mac_addrs) cannot be freed,
> it must be set to NULL in ".dev_close" function to protect from
> subsequent rte_eth_dev_release_port() freeing.
> 
> * Note 1:
> The generic resources are freed in rte_eth_dev_release_port(),
> after ".dev_close" is called in rte_eth_dev_close(), but not when
> calling ".dev_close" directly from the ".remove" PMD function.
> That's why rte_eth_dev_release_port() must still be called explicitly
> from ".remove(device)" after calling the ".dev_close" PMD function.
> 
> * Note 2:
> If a device can have multiple ports, the common resources must be freed
> only in the ".remove(device)" function.
> 
> * Note 3:
> The port is supposed to be in a stopped state when it is closed.
> If it is not the case, it is free to the PMD implementation
> how to react when trying to close a non-stopped port:
> either try to stop it automatically or just return an error.
> 
> Cc: Shijith Thotton <sthotton@marvell.com>
> Cc: Srisivasubramanian Srinivasan <srinivasan@marvell.com>
> Cc: Heinrich Kuhn <heinrich.kuhn@netronome.com>
> Cc: Alfredo Cardigliano <cardigliano@ntop.org>
> 
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> Reviewed-by: Liron Himi <lironh@marvell.com>
> ---

>  drivers/net/e1000/em_ethdev.c             |  5 -----
>  drivers/net/e1000/igb_ethdev.c            | 10 ----------
>  drivers/net/igc/igc_ethdev.c              |  5 -----
>  drivers/net/ixgbe/ixgbe_ethdev.c          | 10 ----------

For e1000/igc/ixgbe

Reviewed-by: Haiyue Wang <haiyue.wang@intel.com>

> 2.28.0
  
Guo, Jia Sept. 29, 2020, 5:55 a.m. UTC | #2
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;
> Shijith Thotton <sthotton@marvell.com>; Srisivasubramanian Srinivasan
> <srinivasan@marvell.com>; Heinrich Kuhn
> <heinrich.kuhn@netronome.com>; Alfredo Cardigliano
> <cardigliano@ntop.org>; Liron Himi <lironh@marvell.com>; Ray Kinsella
> <mdr@ashroe.eu>; Neil Horman <nhorman@tuxdriver.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>; Sachin Saxena <sachin.saxena@oss.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>; 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>;
> Tetsuya Mukawa <mtetsuyah@gmail.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>; Richardson, Bruce
> <bruce.richardson@intel.com>; Singh, Jasvinder
> <jasvinder.singh@intel.com>; Dumitrescu, Cristian
> <cristian.dumitrescu@intel.com>; Wiles, Keith <keith.wiles@intel.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 21/29] ethdev: remove old close behaviour
> 
> The temporary flag RTE_ETH_DEV_CLOSE_REMOVE is removed.
> It was introduced in DPDK 18.11 in order to give time for PMDs to migrate.
> 
> The old behaviour was to free only queues when closing a port.
> The new behaviour is calling rte_eth_dev_release_port() which does three
> more tasks:
> 	- trigger event callback
> 	- reset state and few pointers
> 	- free all generic port resources
> 
> The private port resources must be released in the .dev_close callback.
> 
> The .remove callback should:
> 	- call .dev_close callback
> 	- call rte_eth_dev_release_port()
> 	- free multi-port device shared resources
> 
> Despite waiting two years, some drivers have not migrated, so they may hit
> issues with the incompatible new behaviour.
> After sending emails, adding logs, and announcing the deprecation, the only
> last solution is to declare these drivers as unmaintained:
> 	ionic, liquidio, nfp
> Below is a summary of what to implement in those drivers.
> 
> * The freeing of private port resources must be moved from the
> ".remove(device)" function to the ".dev_close(port)" function.
> 
> * If a generic resource (.mac_addrs or .hash_mac_addrs) cannot be freed, it
> must be set to NULL in ".dev_close" function to protect from subsequent
> rte_eth_dev_release_port() freeing.
> 
> * Note 1:
> The generic resources are freed in rte_eth_dev_release_port(), after
> ".dev_close" is called in rte_eth_dev_close(), but not when calling
> ".dev_close" directly from the ".remove" PMD function.
> That's why rte_eth_dev_release_port() must still be called explicitly from
> ".remove(device)" after calling the ".dev_close" PMD function.
> 
> * Note 2:
> If a device can have multiple ports, the common resources must be freed
> only in the ".remove(device)" function.
> 
> * Note 3:
> The port is supposed to be in a stopped state when it is closed.
> If it is not the case, it is free to the PMD implementation how to react when
> trying to close a non-stopped port:
> either try to stop it automatically or just return an error.
> 
> Cc: Shijith Thotton <sthotton@marvell.com>
> Cc: Srisivasubramanian Srinivasan <srinivasan@marvell.com>
> Cc: Heinrich Kuhn <heinrich.kuhn@netronome.com>
> Cc: Alfredo Cardigliano <cardigliano@ntop.org>
> 
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> Reviewed-by: Liron Himi <lironh@marvell.com>
> ---
>  MAINTAINERS                               |  6 +++---
>  doc/guides/rel_notes/deprecation.rst      |  6 ------
>  drivers/net/af_packet/rte_eth_af_packet.c |  1 -
>  drivers/net/af_xdp/rte_eth_af_xdp.c       |  2 --
>  drivers/net/ark/ark_ethdev.c              |  2 --
>  drivers/net/atlantic/atl_ethdev.c         |  2 --
>  drivers/net/avp/avp_ethdev.c              |  2 --
>  drivers/net/axgbe/axgbe_ethdev.c          |  1 -
>  drivers/net/bnx2x/bnx2x_ethdev.c          |  5 -----
>  drivers/net/bnxt/bnxt_ethdev.c            |  5 -----
>  drivers/net/bnxt/bnxt_reps.c              |  4 ----
>  drivers/net/bonding/rte_eth_bond_pmd.c    |  1 -
>  drivers/net/cxgbe/cxgbe_main.c            |  2 --
>  drivers/net/cxgbe/cxgbevf_main.c          |  2 --
>  drivers/net/dpaa/dpaa_ethdev.c            |  1 -
>  drivers/net/dpaa2/dpaa2_ethdev.c          |  1 -
>  drivers/net/e1000/em_ethdev.c             |  5 -----
>  drivers/net/e1000/igb_ethdev.c            | 10 ----------
>  drivers/net/ena/ena_ethdev.c              |  6 ------
>  drivers/net/enetc/enetc_ethdev.c          |  1 -
>  drivers/net/enic/enic_ethdev.c            |  2 --
>  drivers/net/enic/enic_vf_representor.c    |  3 +--
>  drivers/net/failsafe/failsafe.c           |  1 -
>  drivers/net/fm10k/fm10k_ethdev.c          |  5 -----
>  drivers/net/hinic/hinic_pmd_ethdev.c      |  6 ------
>  drivers/net/hns3/hns3_ethdev.c            |  5 -----
>  drivers/net/hns3/hns3_ethdev_vf.c         |  5 -----
>  drivers/net/i40e/i40e_ethdev.c            |  5 -----
>  drivers/net/i40e/i40e_ethdev_vf.c         |  5 -----
>  drivers/net/iavf/iavf_ethdev.c            |  5 -----
>  drivers/net/ice/ice_dcf_ethdev.c          |  2 --
>  drivers/net/ice/ice_ethdev.c              |  5 -----
>  drivers/net/igc/igc_ethdev.c              |  5 -----
>  drivers/net/ixgbe/ixgbe_ethdev.c          | 10 ----------
>  drivers/net/kni/rte_eth_kni.c             |  2 --
>  drivers/net/memif/rte_eth_memif.c         |  3 ---
>  drivers/net/mlx4/mlx4.c                   |  1 -
>  drivers/net/mlx5/linux/mlx5_os.c          |  2 --
>  drivers/net/mvneta/mvneta_ethdev.c        |  3 ---
>  drivers/net/mvpp2/mrvl_ethdev.c           |  3 ---
>  drivers/net/netvsc/hn_ethdev.c            |  3 ---
>  drivers/net/nfb/nfb_ethdev.c              |  3 ---
>  drivers/net/null/rte_eth_null.c           |  1 -
>  drivers/net/octeontx/octeontx_ethdev.c    |  1 -
>  drivers/net/octeontx2/otx2_ethdev.c       |  1 -
>  drivers/net/pcap/rte_eth_pcap.c           |  1 -
>  drivers/net/pfe/pfe_ethdev.c              |  2 --
>  drivers/net/qede/qede_ethdev.c            |  5 -----
>  drivers/net/ring/rte_eth_ring.c           |  1 -
>  drivers/net/sfc/sfc_ethdev.c              |  4 +---
>  drivers/net/softnic/rte_eth_softnic.c     |  1 -
>  drivers/net/szedata2/rte_eth_szedata2.c   |  3 ---
>  drivers/net/tap/rte_eth_tap.c             |  2 +-
>  drivers/net/vhost/rte_eth_vhost.c         |  2 +-
>  drivers/net/virtio/virtio_ethdev.c        |  5 -----
>  drivers/net/vmxnet3/vmxnet3_ethdev.c      |  3 ---
>  lib/librte_ethdev/rte_ethdev.c            | 17 +----------------
>  lib/librte_ethdev/rte_ethdev.h            |  8 +-------
>  58 files changed, 9 insertions(+), 197 deletions(-)
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 49a6dfa7a5..6aaf80d483 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -604,7 +604,7 @@ F: drivers/net/thunderx/
>  F: doc/guides/nics/thunderx.rst
>  F: doc/guides/nics/features/thunderx.ini
> 
> -Cavium LiquidIO
> +Cavium LiquidIO - UNMAINTAINED
>  M: Shijith Thotton <sthotton@marvell.com>
>  M: Srisivasubramanian Srinivasan <srinivasan@marvell.com>
>  T: git://dpdk.org/next/dpdk-next-net-mrvl
> @@ -793,7 +793,7 @@ F: drivers/net/nfb/
>  F: doc/guides/nics/nfb.rst
>  F: doc/guides/nics/features/nfb.ini
> 
> -Netronome nfp
> +Netronome nfp - UNMAINTAINED
>  M: Heinrich Kuhn <heinrich.kuhn@netronome.com>
>  F: drivers/net/nfp/
>  F: doc/guides/nics/nfp.rst
> @@ -829,7 +829,7 @@ F: doc/guides/nics/pfe.rst
>  F: drivers/net/pfe/
>  F: doc/guides/nics/features/pfe.ini
> 
> -Pensando ionic
> +Pensando ionic - UNMAINTAINED
>  M: Alfredo Cardigliano <cardigliano@ntop.org>
>  F: drivers/net/ionic/
>  F: doc/guides/nics/ionic.rst
> diff --git a/doc/guides/rel_notes/deprecation.rst
> b/doc/guides/rel_notes/deprecation.rst
> index 9691f2c57d..d07b4eeb47 100644
> --- a/doc/guides/rel_notes/deprecation.rst
> +++ b/doc/guides/rel_notes/deprecation.rst
> @@ -137,12 +137,6 @@ Deprecation Notices
>    - ``rte_eth_dev_stop``
>    - ``rte_eth_dev_close``
> 
> -* ethdev: The temporary flag RTE_ETH_DEV_CLOSE_REMOVE will be
> removed in 20.11.
> -  As a consequence, the new behaviour introduced in 18.11 will be effective
> -  for all drivers: generic port resources are freed on close operation.
> -  Private resources are expected to be released in the ``dev_close`` callback.
> -  More details in
> http://inbox.dpdk.org/dev/5248162.j6AOsuQRmx@thomas/
> -
>  * ethdev: New offload flags ``DEV_RX_OFFLOAD_FLOW_MARK`` will be
> added in 19.11.
>    This will allow application to enable or disable PMDs from updating
>    ``rte_mbuf::hash::fdir``.
> diff --git a/drivers/net/af_packet/rte_eth_af_packet.c
> b/drivers/net/af_packet/rte_eth_af_packet.c
> index 12c202cba4..25876224f8 100644
> --- a/drivers/net/af_packet/rte_eth_af_packet.c
> +++ b/drivers/net/af_packet/rte_eth_af_packet.c
> @@ -859,7 +859,6 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
>  	data->nb_tx_queues = (uint16_t)nb_queues;
>  	data->dev_link = pmd_link;
>  	data->mac_addrs = &(*internals)->eth_addr;
> -	data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  	(*eth_dev)->dev_ops = &ops;
> 
> diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c
> b/drivers/net/af_xdp/rte_eth_af_xdp.c
> index badbce63fb..60add9ead4 100644
> --- a/drivers/net/af_xdp/rte_eth_af_xdp.c
> +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
> @@ -1274,8 +1274,6 @@ init_internals(struct rte_vdev_device *dev, const
> char *if_name,
>  	eth_dev->dev_ops = &ops;
>  	eth_dev->rx_pkt_burst = eth_af_xdp_rx;
>  	eth_dev->tx_pkt_burst = eth_af_xdp_tx;
> -	/* Let rte_eth_dev_close() release the port resources. */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  #if defined(XDP_UMEM_UNALIGNED_CHUNK_FLAG)
>  	AF_XDP_LOG(INFO, "Zero copy between umem and mbuf
> enabled.\n"); diff --git a/drivers/net/ark/ark_ethdev.c
> b/drivers/net/ark/ark_ethdev.c index 5f2ed4b7b7..83dc4ecd2c 100644
> --- a/drivers/net/ark/ark_ethdev.c
> +++ b/drivers/net/ark/ark_ethdev.c
> @@ -260,8 +260,6 @@ eth_ark_dev_init(struct rte_eth_dev *dev)
>  	/* Use dummy function until setup */
>  	dev->rx_pkt_burst = &eth_ark_recv_pkts_noop;
>  	dev->tx_pkt_burst = &eth_ark_xmit_pkts_noop;
> -	/* Let rte_eth_dev_close() release the port resources */
> -	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  	ark->bar0 = (uint8_t *)pci_dev->mem_resource[0].addr;
>  	ark->a_bar = (uint8_t *)pci_dev->mem_resource[2].addr; diff --git
> a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c
> index d3babeff94..2217511ca0 100644
> --- a/drivers/net/atlantic/atl_ethdev.c
> +++ b/drivers/net/atlantic/atl_ethdev.c
> @@ -380,8 +380,6 @@ eth_atl_dev_init(struct rte_eth_dev *eth_dev)
>  	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
>  		return 0;
> 
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	/* Vendor and Device ID need to be set before init of shared code */
>  	hw->device_id = pci_dev->id.device_id;
>  	hw->vendor_id = pci_dev->id.vendor_id; diff --git
> a/drivers/net/avp/avp_ethdev.c b/drivers/net/avp/avp_ethdev.c index
> 2eed6acc3f..c730b7ab86 100644
> --- a/drivers/net/avp/avp_ethdev.c
> +++ b/drivers/net/avp/avp_ethdev.c
> @@ -957,8 +957,6 @@ eth_avp_dev_init(struct rte_eth_dev *eth_dev)
>  	eth_dev->dev_ops = &avp_eth_dev_ops;
>  	eth_dev->rx_pkt_burst = &avp_recv_pkts;
>  	eth_dev->tx_pkt_burst = &avp_xmit_pkts;
> -	/* Let rte_eth_dev_close() release the port resources */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
>  		/*
> diff --git a/drivers/net/axgbe/axgbe_ethdev.c
> b/drivers/net/axgbe/axgbe_ethdev.c
> index 2dd64180ad..cf085487cc 100644
> --- a/drivers/net/axgbe/axgbe_ethdev.c
> +++ b/drivers/net/axgbe/axgbe_ethdev.c
> @@ -1959,7 +1959,6 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev)
>  	int ret;
> 
>  	eth_dev->dev_ops = &axgbe_eth_dev_ops;
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  	eth_dev->rx_descriptor_status = axgbe_dev_rx_descriptor_status;
>  	eth_dev->tx_descriptor_status = axgbe_dev_tx_descriptor_status;
> diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c
> b/drivers/net/bnx2x/bnx2x_ethdev.c
> index 8dc46384af..40225b2f44 100644
> --- a/drivers/net/bnx2x/bnx2x_ethdev.c
> +++ b/drivers/net/bnx2x/bnx2x_ethdev.c
> @@ -735,11 +735,6 @@ bnx2x_common_dev_init(struct rte_eth_dev
> *eth_dev, int is_vf)
>  			goto out;
>  	}
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	return 0;
> 
>  out:
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c
> b/drivers/net/bnxt/bnxt_ethdev.c index e726d078ec..a77bab661d 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -5802,11 +5802,6 @@ bnxt_dev_init(struct rte_eth_dev *eth_dev, void
> *params __rte_unused)
> 
>  	bnxt_alloc_switch_domain(bp);
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	PMD_DRV_LOG(INFO,
>  		    DRV_MODULE_NAME "found at mem %" PRIX64 ", node
> addr %pM\n",
>  		    pci_dev->mem_resource[0].phys_addr,
> diff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c
> index 2b6c0a277b..df8680c113 100644
> --- a/drivers/net/bnxt/bnxt_reps.c
> +++ b/drivers/net/bnxt/bnxt_reps.c
> @@ -203,10 +203,6 @@ int bnxt_vf_representor_init(struct rte_eth_dev
> *eth_dev, void *params)
>  	PMD_DRV_LOG(INFO, "calling bnxt_print_link_info\n");
>  	bnxt_print_link_info(eth_dev);
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
>  	PMD_DRV_LOG(INFO,
>  		    "Switch domain id %d: Representor Device %d init done\n",
>  		    vf_rep_bp->switch_domain_id, vf_rep_bp->vf_id); diff --
> git a/drivers/net/bonding/rte_eth_bond_pmd.c
> b/drivers/net/bonding/rte_eth_bond_pmd.c
> index a9ed5d8e12..1f761c7c9e 100644
> --- a/drivers/net/bonding/rte_eth_bond_pmd.c
> +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
> @@ -3209,7 +3209,6 @@ bond_alloc(struct rte_vdev_device *dev, uint8_t
> mode)
>  	}
> 
>  	internals = eth_dev->data->dev_private;
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
>  	eth_dev->data->nb_rx_queues = (uint16_t)1;
>  	eth_dev->data->nb_tx_queues = (uint16_t)1;
> 
> diff --git a/drivers/net/cxgbe/cxgbe_main.c
> b/drivers/net/cxgbe/cxgbe_main.c index da4ae25d47..53b08a64af 100644
> --- a/drivers/net/cxgbe/cxgbe_main.c
> +++ b/drivers/net/cxgbe/cxgbe_main.c
> @@ -2142,8 +2142,6 @@ int cxgbe_probe(struct adapter *adapter)
>  			goto out_free;
>  		}
> 
> -		pi->eth_dev->data->dev_flags |=
> RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  		if (i > 0) {
>  			/* First port will be notified by upper layer */
>  			rte_eth_dev_probing_finish(eth_dev);
> diff --git a/drivers/net/cxgbe/cxgbevf_main.c
> b/drivers/net/cxgbe/cxgbevf_main.c
> index 35d873402b..9ee060504f 100644
> --- a/drivers/net/cxgbe/cxgbevf_main.c
> +++ b/drivers/net/cxgbe/cxgbevf_main.c
> @@ -261,8 +261,6 @@ int cxgbevf_probe(struct adapter *adapter)
>  			goto out_free;
>  		}
> 
> -		pi->eth_dev->data->dev_flags |=
> RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  		if (i > 0) {
>  			/* First port will be notified by upper layer */
>  			rte_eth_dev_probing_finish(eth_dev);
> diff --git a/drivers/net/dpaa/dpaa_ethdev.c
> b/drivers/net/dpaa/dpaa_ethdev.c index 8f986683e2..a01c8f3fc6 100644
> --- a/drivers/net/dpaa/dpaa_ethdev.c
> +++ b/drivers/net/dpaa/dpaa_ethdev.c
> @@ -2127,7 +2127,6 @@ rte_dpaa_probe(struct rte_dpaa_driver *dpaa_drv,
> 
>  	qman_ern_register_cb(dpaa_free_mbuf);
> 
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
>  	if (dpaa_drv->drv_flags & RTE_DPAA_DRV_INTR_LSC)
>  		eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC;
> 
> diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c
> b/drivers/net/dpaa2/dpaa2_ethdev.c
> index 7bd3208a19..d8624514df 100644
> --- a/drivers/net/dpaa2/dpaa2_ethdev.c
> +++ b/drivers/net/dpaa2/dpaa2_ethdev.c
> @@ -2793,7 +2793,6 @@ rte_dpaa2_probe(struct rte_dpaa2_driver
> *dpaa2_drv,
>  	dpaa2_dev->eth_dev = eth_dev;
>  	eth_dev->data->rx_mbuf_alloc_failed = 0;
> 
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
>  	if (dpaa2_drv->drv_flags & RTE_DPAA2_DRV_INTR_LSC)
>  		eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC;
> 
> diff --git a/drivers/net/e1000/em_ethdev.c
> b/drivers/net/e1000/em_ethdev.c index 2d0e071448..6a6ae0e9d5 100644
> --- a/drivers/net/e1000/em_ethdev.c
> +++ b/drivers/net/e1000/em_ethdev.c
> @@ -297,11 +297,6 @@ eth_em_dev_init(struct rte_eth_dev *eth_dev)
>  	rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.addr,
>  		eth_dev->data->mac_addrs);
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	/* initialize the vfta */
>  	memset(shadow_vfta, 0, sizeof(*shadow_vfta));
> 
> diff --git a/drivers/net/e1000/igb_ethdev.c
> b/drivers/net/e1000/igb_ethdev.c index 9e4aefe00c..f8778207ef 100644
> --- a/drivers/net/e1000/igb_ethdev.c
> +++ b/drivers/net/e1000/igb_ethdev.c
> @@ -841,11 +841,6 @@ eth_igb_dev_init(struct rte_eth_dev *eth_dev)
>  	rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.addr,
>  			&eth_dev->data->mac_addrs[0]);
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	/* initialize the vfta */
>  	memset(shadow_vfta, 0, sizeof(*shadow_vfta));
> 
> @@ -997,11 +992,6 @@ eth_igbvf_dev_init(struct rte_eth_dev *eth_dev)
>  		return -ENOMEM;
>  	}
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	/* Generate a random MAC address, if none was assigned by PF. */
>  	if (rte_is_zero_ether_addr(perm_addr)) {
>  		rte_eth_random_addr(perm_addr->addr_bytes);
> diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
> index ae6daad892..cf1c0b9795 100644
> --- a/drivers/net/ena/ena_ethdev.c
> +++ b/drivers/net/ena/ena_ethdev.c
> @@ -1863,12 +1863,6 @@ static int eth_ena_dev_init(struct rte_eth_dev
> *eth_dev)
>  			get_feat_ctx.dev_attr.mac_addr,
>  			(struct rte_ether_addr *)adapter->mac_addr);
> 
> -	/*
> -	 * Pass the information to the rte_eth_dev_close() that it should also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	adapter->drv_stats = rte_zmalloc("adapter stats",
>  					 sizeof(*adapter->drv_stats),
>  					 RTE_CACHE_LINE_SIZE);
> diff --git a/drivers/net/enetc/enetc_ethdev.c
> b/drivers/net/enetc/enetc_ethdev.c
> index afb658df3d..325c93b92a 100644
> --- a/drivers/net/enetc/enetc_ethdev.c
> +++ b/drivers/net/enetc/enetc_ethdev.c
> @@ -877,7 +877,6 @@ enetc_dev_init(struct rte_eth_dev *eth_dev)
>  	eth_dev->dev_ops = &enetc_ops;
>  	eth_dev->rx_pkt_burst = &enetc_recv_pkts;
>  	eth_dev->tx_pkt_burst = &enetc_xmit_pkts;
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  	/* Retrieving and storing the HW base address of device */
>  	hw->hw.reg = (void *)pci_dev->mem_resource[0].addr; diff --git
> a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c index
> ed03d53608..27f60b45b8 100644
> --- a/drivers/net/enic/enic_ethdev.c
> +++ b/drivers/net/enic/enic_ethdev.c
> @@ -1292,8 +1292,6 @@ static int eth_enic_dev_init(struct rte_eth_dev
> *eth_dev,
>  	enic->port_id = eth_dev->data->port_id;
>  	enic->rte_dev = eth_dev;
>  	enic->dev_data = eth_dev->data;
> -	/* Let rte_eth_dev_close() release the port resources */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  	pdev = RTE_ETH_DEV_TO_PCI(eth_dev);
>  	rte_eth_copy_pci_info(eth_dev, pdev);
> diff --git a/drivers/net/enic/enic_vf_representor.c
> b/drivers/net/enic/enic_vf_representor.c
> index c528be2b98..169c611a68 100644
> --- a/drivers/net/enic/enic_vf_representor.c
> +++ b/drivers/net/enic/enic_vf_representor.c
> @@ -670,8 +670,7 @@ int enic_vf_representor_init(struct rte_eth_dev
> *eth_dev, void *init_params)
> 
>  	eth_dev->device->driver = pf->rte_dev->device->driver;
>  	eth_dev->dev_ops = &enic_vf_representor_dev_ops;
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR
> -		| RTE_ETH_DEV_CLOSE_REMOVE;
> +	eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR;
>  	eth_dev->data->representor_id = vf->vf_id;
>  	eth_dev->data->mac_addrs = rte_zmalloc("enic_mac_addr_vf",
>  		sizeof(struct rte_ether_addr) *
> diff --git a/drivers/net/failsafe/failsafe.c b/drivers/net/failsafe/failsafe.c
> index 44d47e8f72..b921e101e6 100644
> --- a/drivers/net/failsafe/failsafe.c
> +++ b/drivers/net/failsafe/failsafe.c
> @@ -180,7 +180,6 @@ fs_eth_dev_create(struct rte_vdev_device *vdev)
>  		ERROR("Unable to allocate rte_eth_dev");
>  		return -1;
>  	}
> -	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
>  	priv = PRIV(dev);
>  	priv->data = dev->data;
>  	priv->rxp = FS_RX_PROXY_INIT;
> diff --git a/drivers/net/fm10k/fm10k_ethdev.c
> b/drivers/net/fm10k/fm10k_ethdev.c
> index 533f976709..23f4d04068 100644
> --- a/drivers/net/fm10k/fm10k_ethdev.c
> +++ b/drivers/net/fm10k/fm10k_ethdev.c
> @@ -3129,11 +3129,6 @@ eth_fm10k_dev_init(struct rte_eth_dev *dev)
>  		&dev->data->mac_addrs[0]);
>  	}
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	/* Reset the hw statistics */
>  	diag = fm10k_stats_reset(dev);
>  	if (diag != 0) {
> diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c
> b/drivers/net/hinic/hinic_pmd_ethdev.c
> index 5f2e97d3bd..623534fda4 100644
> --- a/drivers/net/hinic/hinic_pmd_ethdev.c
> +++ b/drivers/net/hinic/hinic_pmd_ethdev.c
> @@ -3100,12 +3100,6 @@ static int hinic_func_init(struct rte_eth_dev
> *eth_dev)
>  		goto mc_addr_fail;
>  	}
> 
> -	/*
> -	 * Pass the information to the rte_eth_dev_close() that it should also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	/* create hardware nic_device */
>  	rc = hinic_nic_dev_create(eth_dev);
>  	if (rc) {
> diff --git a/drivers/net/hns3/hns3_ethdev.c
> b/drivers/net/hns3/hns3_ethdev.c index 3b395a1ccf..dd03bd62b2 100644
> --- a/drivers/net/hns3/hns3_ethdev.c
> +++ b/drivers/net/hns3/hns3_ethdev.c
> @@ -5678,11 +5678,6 @@ hns3_dev_init(struct rte_eth_dev *eth_dev)
>  			    &eth_dev->data->mac_addrs[0]);
> 
>  	hw->adapter_state = HNS3_NIC_INITIALIZED;
> -	/*
> -	 * Pass the information to the rte_eth_dev_close() that it should also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  	if (rte_atomic16_read(&hns->hw.reset.schedule) ==
> SCHEDULE_PENDING) {
>  		hns3_err(hw, "Reschedule reset service after dev_init"); diff
> --git a/drivers/net/hns3/hns3_ethdev_vf.c
> b/drivers/net/hns3/hns3_ethdev_vf.c
> index e0ca5a6ac2..436d864b5f 100644
> --- a/drivers/net/hns3/hns3_ethdev_vf.c
> +++ b/drivers/net/hns3/hns3_ethdev_vf.c
> @@ -2684,11 +2684,6 @@ hns3vf_dev_init(struct rte_eth_dev *eth_dev)
>  			    &eth_dev->data->mac_addrs[0]);
> 
>  	hw->adapter_state = HNS3_NIC_INITIALIZED;
> -	/*
> -	 * Pass the information to the rte_eth_dev_close() that it should also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  	if (rte_atomic16_read(&hns->hw.reset.schedule) ==
> SCHEDULE_PENDING) {
>  		hns3_err(hw, "Reschedule reset service after dev_init"); diff
> --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index 804f0128ab..6fb88148b8 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -1699,11 +1699,6 @@ eth_i40e_dev_init(struct rte_eth_dev *dev, void
> *init_params __rte_unused)
>  	rte_ether_addr_copy((struct rte_ether_addr *)hw-
> >mac.perm_addr,
>  					&dev->data->mac_addrs[0]);
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	/* Init dcb to sw mode by default */
>  	ret = i40e_dcb_init_configure(dev, TRUE);
>  	if (ret != I40E_SUCCESS) {
> diff --git a/drivers/net/i40e/i40e_ethdev_vf.c
> b/drivers/net/i40e/i40e_ethdev_vf.c
> index 61aad8c415..4aaf41956c 100644
> --- a/drivers/net/i40e/i40e_ethdev_vf.c
> +++ b/drivers/net/i40e/i40e_ethdev_vf.c
> @@ -1586,11 +1586,6 @@ i40evf_dev_init(struct rte_eth_dev *eth_dev)
>  	hw->adapter_stopped = 1;
>  	hw->adapter_closed = 0;
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	if(i40evf_init_vf(eth_dev) != 0) {
>  		PMD_INIT_LOG(ERR, "Init vf failed");
>  		return -1;
> diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
> index 8f46c4588f..512ade2ad0 100644
> --- a/drivers/net/iavf/iavf_ethdev.c
> +++ b/drivers/net/iavf/iavf_ethdev.c
> @@ -1412,11 +1412,6 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)
>  	adapter->eth_dev = eth_dev;
>  	adapter->stopped = 1;
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	if (iavf_init_vf(eth_dev) != 0) {
>  		PMD_INIT_LOG(ERR, "Init vf failed");
>  		return -1;
> diff --git a/drivers/net/ice/ice_dcf_ethdev.c
> b/drivers/net/ice/ice_dcf_ethdev.c
> index 5b626cb641..33dd0c44f2 100644
> --- a/drivers/net/ice/ice_dcf_ethdev.c
> +++ b/drivers/net/ice/ice_dcf_ethdev.c
> @@ -908,8 +908,6 @@ ice_dcf_dev_init(struct rte_eth_dev *eth_dev)
>  	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
>  		return 0;
> 
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	adapter->real_hw.vc_event_msg_cb =
> ice_dcf_handle_pf_event_msg;
>  	if (ice_dcf_init_hw(eth_dev, &adapter->real_hw) != 0) {
>  		PMD_INIT_LOG(ERR, "Failed to init DCF hardware"); diff --git
> a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index
> b4ac5e3f81..85a3ca6a2d 100644
> --- a/drivers/net/ice/ice_ethdev.c
> +++ b/drivers/net/ice/ice_ethdev.c
> @@ -2245,11 +2245,6 @@ ice_dev_init(struct rte_eth_dev *dev)
>  		goto err_init_mac;
>  	}
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	ret = ice_res_pool_init(&pf->msix_pool, 1,
>  				hw-
> >func_caps.common_cap.num_msix_vectors - 1);
>  	if (ret) {
> diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c index
> 11397c5c1d..9d27fc0d07 100644
> --- a/drivers/net/igc/igc_ethdev.c
> +++ b/drivers/net/igc/igc_ethdev.c
> @@ -1323,11 +1323,6 @@ eth_igc_dev_init(struct rte_eth_dev *dev)
>  		goto err_late;
>  	}
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	hw->mac.get_link_status = 1;
>  	igc->stopped = 0;
> 
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> b/drivers/net/ixgbe/ixgbe_ethdev.c
> index 5a863ca4bf..600e9d6928 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> @@ -1248,11 +1248,6 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev,
> void *init_params __rte_unused)
>  		return -ENOMEM;
>  	}
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	/* initialize the vfta */
>  	memset(shadow_vfta, 0, sizeof(*shadow_vfta));
> 
> @@ -1663,11 +1658,6 @@ eth_ixgbevf_dev_init(struct rte_eth_dev
> *eth_dev)
>  		return -ENOMEM;
>  	}
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	/* Generate a random MAC address, if none was assigned by PF. */
>  	if (rte_is_zero_ether_addr(perm_addr)) {
>  		generate_random_mac_addr(perm_addr);
> diff --git a/drivers/net/kni/rte_eth_kni.c b/drivers/net/kni/rte_eth_kni.c
> index aa365a57de..45ab1b17a8 100644
> --- a/drivers/net/kni/rte_eth_kni.c
> +++ b/drivers/net/kni/rte_eth_kni.c
> @@ -387,8 +387,6 @@ eth_kni_create(struct rte_vdev_device *vdev,
>  	data->promiscuous = 1;
>  	data->all_multicast = 1;
> 
> -	data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	rte_eth_random_addr(internals->eth_addr.addr_bytes);
> 
>  	eth_dev->dev_ops = &eth_kni_ops;
> diff --git a/drivers/net/memif/rte_eth_memif.c
> b/drivers/net/memif/rte_eth_memif.c
> index 1a2411c838..ff8a58081f 100644
> --- a/drivers/net/memif/rte_eth_memif.c
> +++ b/drivers/net/memif/rte_eth_memif.c
> @@ -1527,9 +1527,6 @@ memif_create(struct rte_vdev_device *vdev,
> enum memif_role_t role,
>  		eth_dev->tx_pkt_burst = eth_memif_tx;
>  	}
> 
> -
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	rte_eth_dev_probing_finish(eth_dev);
> 
>  	return 0;
> diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index
> ad7c805d67..3e57875414 100644
> --- a/drivers/net/mlx4/mlx4.c
> +++ b/drivers/net/mlx4/mlx4.c
> @@ -1027,7 +1027,6 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv,
> struct rte_pci_device *pci_dev)
>  			ERROR("can not allocate rte ethdev");
>  			goto port_error;
>  		}
> -		eth_dev->data->dev_flags |=
> RTE_ETH_DEV_CLOSE_REMOVE;
>  		eth_dev->data->dev_private = priv;
>  		eth_dev->data->mac_addrs = priv->mac;
>  		eth_dev->device = &pci_dev->device;
> diff --git a/drivers/net/mlx5/linux/mlx5_os.c
> b/drivers/net/mlx5/linux/mlx5_os.c
> index 0511a55a28..8e498314ef 100644
> --- a/drivers/net/mlx5/linux/mlx5_os.c
> +++ b/drivers/net/mlx5/linux/mlx5_os.c
> @@ -1155,8 +1155,6 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
>  		err = ENOMEM;
>  		goto error;
>  	}
> -	/* Flag to call rte_eth_dev_release_port() in rte_eth_dev_close(). */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
>  	if (priv->representor) {
>  		eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR;
>  		eth_dev->data->representor_id = priv->representor_id; diff
> --git a/drivers/net/mvneta/mvneta_ethdev.c
> b/drivers/net/mvneta/mvneta_ethdev.c
> index eebcdb840e..db142bec23 100644
> --- a/drivers/net/mvneta/mvneta_ethdev.c
> +++ b/drivers/net/mvneta/mvneta_ethdev.c
> @@ -834,9 +834,6 @@ mvneta_eth_dev_create(struct rte_vdev_device
> *vdev, const char *name)
>  	mvneta_set_tx_function(eth_dev);
>  	eth_dev->dev_ops = &mvneta_ops;
> 
> -	/* Flag to call rte_eth_dev_release_port() in rte_eth_dev_close(). */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	rte_eth_dev_probing_finish(eth_dev);
>  	return 0;
>  out_free:
> diff --git a/drivers/net/mvpp2/mrvl_ethdev.c
> b/drivers/net/mvpp2/mrvl_ethdev.c index 27f7cfb056..cfb97e4f8f 100644
> --- a/drivers/net/mvpp2/mrvl_ethdev.c
> +++ b/drivers/net/mvpp2/mrvl_ethdev.c
> @@ -2863,9 +2863,6 @@ mrvl_eth_dev_create(struct rte_vdev_device
> *vdev, const char *name)
>  	mrvl_set_tx_function(eth_dev);
>  	eth_dev->dev_ops = &mrvl_ops;
> 
> -	/* Flag to call rte_eth_dev_release_port() in rte_eth_dev_close(). */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	rte_eth_dev_probing_finish(eth_dev);
>  	return 0;
>  out_free:
> diff --git a/drivers/net/netvsc/hn_ethdev.c
> b/drivers/net/netvsc/hn_ethdev.c index 8968036ea3..15d6e9762d 100644
> --- a/drivers/net/netvsc/hn_ethdev.c
> +++ b/drivers/net/netvsc/hn_ethdev.c
> @@ -123,9 +123,6 @@ eth_dev_vmbus_allocate(struct rte_vmbus_device
> *dev, size_t private_data_size)
>  	eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC;
>  	eth_dev->intr_handle = &dev->intr_handle;
> 
> -	/* allow ethdev to remove on close */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	return eth_dev;
>  }
> 
> diff --git a/drivers/net/nfb/nfb_ethdev.c b/drivers/net/nfb/nfb_ethdev.c
> index c3c3d003f1..d937ac6922 100644
> --- a/drivers/net/nfb/nfb_ethdev.c
> +++ b/drivers/net/nfb/nfb_ethdev.c
> @@ -457,9 +457,6 @@ nfb_eth_dev_init(struct rte_eth_dev *dev)
>  		rte_kvargs_free(kvlist);
>  	}
> 
> -	/* Let rte_eth_dev_close() release the port resources */
> -	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	/*
>  	 * Get number of available DMA RX and TX queues, which is
> maximum
>  	 * number of queues that can be created and store it in private
> device diff --git a/drivers/net/null/rte_eth_null.c
> b/drivers/net/null/rte_eth_null.c index 84c1d0c951..7c3c76a897 100644
> --- a/drivers/net/null/rte_eth_null.c
> +++ b/drivers/net/null/rte_eth_null.c
> @@ -548,7 +548,6 @@ eth_dev_null_create(struct rte_vdev_device *dev,
> struct pmd_options *args)
>  	data->mac_addrs = &internals->eth_addr;
>  	data->promiscuous = 1;
>  	data->all_multicast = 1;
> -	data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  	eth_dev->dev_ops = &ops;
> 
> diff --git a/drivers/net/octeontx/octeontx_ethdev.c
> b/drivers/net/octeontx/octeontx_ethdev.c
> index 48ce3e1621..a263f45399 100644
> --- a/drivers/net/octeontx/octeontx_ethdev.c
> +++ b/drivers/net/octeontx/octeontx_ethdev.c
> @@ -1374,7 +1374,6 @@ octeontx_create(struct rte_vdev_device *dev, int
> port, uint8_t evdev,
>  	data->promiscuous = 0;
>  	data->all_multicast = 0;
>  	data->scattered_rx = 0;
> -	data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  	/* Get maximum number of supported MAC entries */
>  	max_entries = octeontx_bgx_port_mac_entries_get(nic->port_id);
> diff --git a/drivers/net/octeontx2/otx2_ethdev.c
> b/drivers/net/octeontx2/otx2_ethdev.c
> index abe5f03628..581ac89381 100644
> --- a/drivers/net/octeontx2/otx2_ethdev.c
> +++ b/drivers/net/octeontx2/otx2_ethdev.c
> @@ -2394,7 +2394,6 @@ otx2_eth_dev_init(struct rte_eth_dev *eth_dev)
>  	pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
> 
>  	rte_eth_copy_pci_info(eth_dev, pci_dev);
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  	/* Zero out everything after OTX2_DEV to allow proper dev_reset()
> */
>  	memset(&dev->otx2_eth_dev_data_start, 0, sizeof(*dev) - diff --git
> a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c
> index 909eef8cce..da4988064a 100644
> --- a/drivers/net/pcap/rte_eth_pcap.c
> +++ b/drivers/net/pcap/rte_eth_pcap.c
> @@ -1334,7 +1334,6 @@ eth_from_pcaps(struct rte_vdev_device *vdev,
>  	else
>  		eth_dev->tx_pkt_burst = eth_tx_drop;
> 
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
>  	rte_eth_dev_probing_finish(eth_dev);
>  	return 0;
>  }
> diff --git a/drivers/net/pfe/pfe_ethdev.c b/drivers/net/pfe/pfe_ethdev.c
> index 55f2fea4b2..bb2ae0df34 100644
> --- a/drivers/net/pfe/pfe_ethdev.c
> +++ b/drivers/net/pfe/pfe_ethdev.c
> @@ -846,8 +846,6 @@ pfe_eth_init(struct rte_vdev_device *vdev, struct
> pfe *pfe, int id)
>  	eth_dev->data->nb_rx_queues = 1;
>  	eth_dev->data->nb_tx_queues = 1;
> 
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	/* For link status, open the PFE CDEV; Error from this function
>  	 * is silently ignored; In case of error, the link status will not
>  	 * be available.
> diff --git a/drivers/net/qede/qede_ethdev.c
> b/drivers/net/qede/qede_ethdev.c index 43fe68c2bf..cd578709fb 100644
> --- a/drivers/net/qede/qede_ethdev.c
> +++ b/drivers/net/qede/qede_ethdev.c
> @@ -2711,11 +2711,6 @@ static int qede_common_dev_init(struct
> rte_eth_dev *eth_dev, bool is_vf)
>  		adapter->ipgre.enable = false;
>  	}
> 
> -	/* Pass the information to the rte_eth_dev_close() that it should
> also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	DP_INFO(edev, "MAC
> address : %02x:%02x:%02x:%02x:%02x:%02x\n",
>  		adapter->primary_mac.addr_bytes[0],
>  		adapter->primary_mac.addr_bytes[1],
> diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c
> index ed0fdeb28f..12046f5a00 100644
> --- a/drivers/net/ring/rte_eth_ring.c
> +++ b/drivers/net/ring/rte_eth_ring.c
> @@ -358,7 +358,6 @@ do_eth_dev_ring_create(const char *name,
> 
>  	eth_dev->dev_ops = &ops;
>  	data->numa_node = numa_node;
> -	data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  	/* finally assign rx and tx ops */
>  	eth_dev->rx_pkt_burst = eth_ring_rx;
> diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
> index eaa48627d6..1c72e40b75 100644
> --- a/drivers/net/sfc/sfc_ethdev.c
> +++ b/drivers/net/sfc/sfc_ethdev.c
> @@ -343,7 +343,7 @@ sfc_dev_close(struct rte_eth_dev *dev)
>  	}
> 
>  	/*
> -	 * Cleanup all resources in accordance with
> RTE_ETH_DEV_CLOSE_REMOVE.
> +	 * Cleanup all resources.
>  	 * Rollback primary process sfc_eth_dev_init() below.
>  	 */
> 
> @@ -2179,8 +2179,6 @@ sfc_eth_dev_init(struct rte_eth_dev *dev)
> 
>  	sfc_log_init(sa, "entry");
> 
> -	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	dev->data->mac_addrs = rte_zmalloc("sfc", RTE_ETHER_ADDR_LEN,
> 0);
>  	if (dev->data->mac_addrs == NULL) {
>  		rc = ENOMEM;
> diff --git a/drivers/net/softnic/rte_eth_softnic.c
> b/drivers/net/softnic/rte_eth_softnic.c
> index ad9e2aa86d..e942df78b6 100644
> --- a/drivers/net/softnic/rte_eth_softnic.c
> +++ b/drivers/net/softnic/rte_eth_softnic.c
> @@ -390,7 +390,6 @@ pmd_ethdev_register(struct rte_vdev_device *vdev,
>  	dev->device = &vdev->device;
> 
>  	/* dev->data */
> -	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
>  	dev->data->dev_private = dev_private;
>  	dev->data->dev_link.link_speed = ETH_SPEED_NUM_100G;
>  	dev->data->dev_link.link_duplex = ETH_LINK_FULL_DUPLEX; diff --
> git a/drivers/net/szedata2/rte_eth_szedata2.c
> b/drivers/net/szedata2/rte_eth_szedata2.c
> index daa40cfd6c..4325b9a30d 100644
> --- a/drivers/net/szedata2/rte_eth_szedata2.c
> +++ b/drivers/net/szedata2/rte_eth_szedata2.c
> @@ -1488,9 +1488,6 @@ rte_szedata2_eth_dev_init(struct rte_eth_dev
> *dev, struct port_info *pi)
>  	PMD_INIT_LOG(INFO, "Initializing eth_dev %s (driver %s)", data-
> >name,
>  			RTE_STR(RTE_SZEDATA2_DRIVER_NAME));
> 
> -	/* Let rte_eth_dev_close() release the port resources */
> -	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	/* Fill internal private structure. */
>  	internals->dev = dev;
>  	/* Get index of szedata2 device file and create path to device file */
> diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
> index 0d217f1486..b127ce62dc 100644
> --- a/drivers/net/tap/rte_eth_tap.c
> +++ b/drivers/net/tap/rte_eth_tap.c
> @@ -1922,7 +1922,7 @@ eth_dev_tap_create(struct rte_vdev_device *vdev,
> const char *tap_name,
>  	/* Setup some default values */
>  	data = dev->data;
>  	data->dev_private = pmd;
> -	data->dev_flags = RTE_ETH_DEV_INTR_LSC |
> RTE_ETH_DEV_CLOSE_REMOVE;
> +	data->dev_flags = RTE_ETH_DEV_INTR_LSC;
>  	data->numa_node = numa_node;
> 
>  	data->dev_link = pmd_link;
> diff --git a/drivers/net/vhost/rte_eth_vhost.c
> b/drivers/net/vhost/rte_eth_vhost.c
> index f67f4db812..45552ef742 100644
> --- a/drivers/net/vhost/rte_eth_vhost.c
> +++ b/drivers/net/vhost/rte_eth_vhost.c
> @@ -1443,7 +1443,7 @@ eth_dev_vhost_create(struct rte_vdev_device
> *dev, char *iface_name,
>  	internal->flags = flags;
>  	internal->disable_flags = disable_flags;
>  	data->dev_link = pmd_link;
> -	data->dev_flags = RTE_ETH_DEV_INTR_LSC |
> RTE_ETH_DEV_CLOSE_REMOVE;
> +	data->dev_flags = RTE_ETH_DEV_INTR_LSC;
>  	data->promiscuous = 1;
>  	data->all_multicast = 1;
> 
> diff --git a/drivers/net/virtio/virtio_ethdev.c
> b/drivers/net/virtio/virtio_ethdev.c
> index 0787337a01..b6ed5829bd 100644
> --- a/drivers/net/virtio/virtio_ethdev.c
> +++ b/drivers/net/virtio/virtio_ethdev.c
> @@ -1924,11 +1924,6 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev)
>  	if (ret < 0)
>  		return ret;
>  	hw->speed = speed;
> -	/*
> -	 * Pass the information to the rte_eth_dev_close() that it should also
> -	 * release the private port resources.
> -	 */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> 
>  	/* Allocate memory for storing MAC addresses */
>  	eth_dev->data->mac_addrs = rte_zmalloc("virtio", diff --git
> a/drivers/net/vmxnet3/vmxnet3_ethdev.c
> b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> index 17fed0ed6e..34a169d2c0 100644
> --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
> +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> @@ -321,9 +321,6 @@ eth_vmxnet3_dev_init(struct rte_eth_dev *eth_dev)
>  		     hw->perm_addr[0], hw->perm_addr[1], hw-
> >perm_addr[2],
>  		     hw->perm_addr[3], hw->perm_addr[4], hw-
> >perm_addr[5]);
> 
> -	/* Flag to call rte_eth_dev_release_port() in rte_eth_dev_close(). */
> -	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
> -
>  	/* Put device in Quiesce Mode */
>  	VMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_CMD,
> VMXNET3_CMD_QUIESCE_DEV);
> 
> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
> index d12d74dd8c..d7668114ca 100644
> --- a/lib/librte_ethdev/rte_ethdev.c
> +++ b/lib/librte_ethdev/rte_ethdev.c
> @@ -1720,22 +1720,7 @@ rte_eth_dev_close(uint16_t port_id)
>  	(*dev->dev_ops->dev_close)(dev);
> 
>  	rte_ethdev_trace_close(port_id);
> -	/* check behaviour flag - temporary for PMD migration */
> -	if ((dev->data->dev_flags & RTE_ETH_DEV_CLOSE_REMOVE) != 0) {
> -		/* new behaviour: send event + reset state + free all data */
> -		rte_eth_dev_release_port(dev);
> -		return;
> -	}
> -	RTE_ETHDEV_LOG(DEBUG, "Port closing is using an old behaviour.\n"
> -			"The driver %s should migrate to the new
> behaviour.\n",
> -			dev->device->driver->name);
> -	/* old behaviour: only free queue arrays */
> -	dev->data->nb_rx_queues = 0;
> -	rte_free(dev->data->rx_queues);
> -	dev->data->rx_queues = NULL;
> -	dev->data->nb_tx_queues = 0;
> -	rte_free(dev->data->tx_queues);
> -	dev->data->tx_queues = NULL;
> +	rte_eth_dev_release_port(dev);
>  }
> 
>  int
> diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
> index 645a18664d..24d898ae89 100644
> --- a/lib/librte_ethdev/rte_ethdev.h
> +++ b/lib/librte_ethdev/rte_ethdev.h
> @@ -1654,11 +1654,6 @@ struct rte_eth_dev_owner {
>  	char name[RTE_ETH_MAX_OWNER_NAME_LEN]; /**< The owner
> name. */  };
> 
> -/**
> - * Port is released (i.e. totally freed and data erased) on close.
> - * Temporary flag for PMD migration to new rte_eth_dev_close() behaviour.
> - */
> -#define RTE_ETH_DEV_CLOSE_REMOVE 0x0001
>  /** Device supports link state interrupt */
>  #define RTE_ETH_DEV_INTR_LSC     0x0002
>  /** Device is a bonded slave */
> @@ -2282,8 +2277,7 @@ int rte_eth_dev_set_link_down(uint16_t port_id);
> 
>  /**
>   * Close a stopped Ethernet device. The device cannot be restarted!
> - * The function frees all port resources if the driver supports
> - * the flag RTE_ETH_DEV_CLOSE_REMOVE.
> + * The function frees all port resources.
>   *
>   * @param port_id
>   *   The port identifier of the Ethernet device.
> --
> 2.28.0
  
Andrew Rybchenko Sept. 29, 2020, 10:38 a.m. UTC | #3
On 9/29/20 2:14 AM, Thomas Monjalon wrote:
> The temporary flag RTE_ETH_DEV_CLOSE_REMOVE is removed.
> It was introduced in DPDK 18.11 in order to give time for PMDs to migrate.
> 
> The old behaviour was to free only queues when closing a port.
> The new behaviour is calling rte_eth_dev_release_port() which does
> three more tasks:
> 	- trigger event callback
> 	- reset state and few pointers
> 	- free all generic port resources
> 
> The private port resources must be released in the .dev_close callback.
> 
> The .remove callback should:
> 	- call .dev_close callback
> 	- call rte_eth_dev_release_port()
> 	- free multi-port device shared resources
> 
> Despite waiting two years, some drivers have not migrated,
> so they may hit issues with the incompatible new behaviour.
> After sending emails, adding logs, and announcing the deprecation,
> the only last solution is to declare these drivers as unmaintained:
> 	ionic, liquidio, nfp
> Below is a summary of what to implement in those drivers.
> 
> * The freeing of private port resources must be moved
> from the ".remove(device)" function to the ".dev_close(port)" function.
> 
> * If a generic resource (.mac_addrs or .hash_mac_addrs) cannot be freed,
> it must be set to NULL in ".dev_close" function to protect from
> subsequent rte_eth_dev_release_port() freeing.
> 
> * Note 1:
> The generic resources are freed in rte_eth_dev_release_port(),
> after ".dev_close" is called in rte_eth_dev_close(), but not when
> calling ".dev_close" directly from the ".remove" PMD function.
> That's why rte_eth_dev_release_port() must still be called explicitly
> from ".remove(device)" after calling the ".dev_close" PMD function.
> 
> * Note 2:
> If a device can have multiple ports, the common resources must be freed
> only in the ".remove(device)" function.
> 
> * Note 3:
> The port is supposed to be in a stopped state when it is closed.
> If it is not the case, it is free to the PMD implementation
> how to react when trying to close a non-stopped port:
> either try to stop it automatically or just return an error.
> 
> Cc: Shijith Thotton <sthotton@marvell.com>
> Cc: Srisivasubramanian Srinivasan <srinivasan@marvell.com>
> Cc: Heinrich Kuhn <heinrich.kuhn@netronome.com>
> Cc: Alfredo Cardigliano <cardigliano@ntop.org>
> 
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> Reviewed-by: Liron Himi <lironh@marvell.com>

Acked-by: Andrew Rybchenko <arybchenko@solarflare.com>
  
Ferruh Yigit Sept. 29, 2020, 5:08 p.m. UTC | #4
On 9/29/2020 12:14 AM, Thomas Monjalon wrote:
> The temporary flag RTE_ETH_DEV_CLOSE_REMOVE is removed.
> It was introduced in DPDK 18.11 in order to give time for PMDs to migrate.
> 
> The old behaviour was to free only queues when closing a port.
> The new behaviour is calling rte_eth_dev_release_port() which does
> three more tasks:
> 	- trigger event callback
> 	- reset state and few pointers
> 	- free all generic port resources
> 
> The private port resources must be released in the .dev_close callback.
> 
> The .remove callback should:
> 	- call .dev_close callback
> 	- call rte_eth_dev_release_port()
> 	- free multi-port device shared resources
> 
> Despite waiting two years, some drivers have not migrated,
> so they may hit issues with the incompatible new behaviour.
> After sending emails, adding logs, and announcing the deprecation,
> the only last solution is to declare these drivers as unmaintained:
> 	ionic, liquidio, nfp
> Below is a summary of what to implement in those drivers.
> 
> * The freeing of private port resources must be moved
> from the ".remove(device)" function to the ".dev_close(port)" function.
> 
> * If a generic resource (.mac_addrs or .hash_mac_addrs) cannot be freed,
> it must be set to NULL in ".dev_close" function to protect from
> subsequent rte_eth_dev_release_port() freeing.
> 
> * Note 1:
> The generic resources are freed in rte_eth_dev_release_port(),
> after ".dev_close" is called in rte_eth_dev_close(), but not when
> calling ".dev_close" directly from the ".remove" PMD function.
> That's why rte_eth_dev_release_port() must still be called explicitly
> from ".remove(device)" after calling the ".dev_close" PMD function.
> 
> * Note 2:
> If a device can have multiple ports, the common resources must be freed
> only in the ".remove(device)" function.
> 
> * Note 3:
> The port is supposed to be in a stopped state when it is closed.
> If it is not the case, it is free to the PMD implementation
> how to react when trying to close a non-stopped port:
> either try to stop it automatically or just return an error.
> 
> Cc: Shijith Thotton <sthotton@marvell.com>
> Cc: Srisivasubramanian Srinivasan <srinivasan@marvell.com>
> Cc: Heinrich Kuhn <heinrich.kuhn@netronome.com>
> Cc: Alfredo Cardigliano <cardigliano@ntop.org>
> 
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> Reviewed-by: Liron Himi <lironh@marvell.com>


Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>

> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 49a6dfa7a5..6aaf80d483 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -604,7 +604,7 @@ F: drivers/net/thunderx/
>   F: doc/guides/nics/thunderx.rst
>   F: doc/guides/nics/features/thunderx.ini
>   
> -Cavium LiquidIO
> +Cavium LiquidIO - UNMAINTAINED
>   M: Shijith Thotton <sthotton@marvell.com>
>   M: Srisivasubramanian Srinivasan <srinivasan@marvell.com>
>   T: git://dpdk.org/next/dpdk-next-net-mrvl
> @@ -793,7 +793,7 @@ F: drivers/net/nfb/
>   F: doc/guides/nics/nfb.rst
>   F: doc/guides/nics/features/nfb.ini
>   
> -Netronome nfp
> +Netronome nfp - UNMAINTAINED
>   M: Heinrich Kuhn <heinrich.kuhn@netronome.com>
>   F: drivers/net/nfp/
>   F: doc/guides/nics/nfp.rst
> @@ -829,7 +829,7 @@ F: doc/guides/nics/pfe.rst
>   F: drivers/net/pfe/
>   F: doc/guides/nics/features/pfe.ini
>   
> -Pensando ionic
> +Pensando ionic - UNMAINTAINED
>   M: Alfredo Cardigliano <cardigliano@ntop.org>
>   F: drivers/net/ionic/
>   F: doc/guides/nics/ionic.rst

Just to highlight above drivers that are marked as 'UNMAINTAINED'.
  

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
index 49a6dfa7a5..6aaf80d483 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -604,7 +604,7 @@  F: drivers/net/thunderx/
 F: doc/guides/nics/thunderx.rst
 F: doc/guides/nics/features/thunderx.ini
 
-Cavium LiquidIO
+Cavium LiquidIO - UNMAINTAINED
 M: Shijith Thotton <sthotton@marvell.com>
 M: Srisivasubramanian Srinivasan <srinivasan@marvell.com>
 T: git://dpdk.org/next/dpdk-next-net-mrvl
@@ -793,7 +793,7 @@  F: drivers/net/nfb/
 F: doc/guides/nics/nfb.rst
 F: doc/guides/nics/features/nfb.ini
 
-Netronome nfp
+Netronome nfp - UNMAINTAINED
 M: Heinrich Kuhn <heinrich.kuhn@netronome.com>
 F: drivers/net/nfp/
 F: doc/guides/nics/nfp.rst
@@ -829,7 +829,7 @@  F: doc/guides/nics/pfe.rst
 F: drivers/net/pfe/
 F: doc/guides/nics/features/pfe.ini
 
-Pensando ionic
+Pensando ionic - UNMAINTAINED
 M: Alfredo Cardigliano <cardigliano@ntop.org>
 F: drivers/net/ionic/
 F: doc/guides/nics/ionic.rst
diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst
index 9691f2c57d..d07b4eeb47 100644
--- a/doc/guides/rel_notes/deprecation.rst
+++ b/doc/guides/rel_notes/deprecation.rst
@@ -137,12 +137,6 @@  Deprecation Notices
   - ``rte_eth_dev_stop``
   - ``rte_eth_dev_close``
 
-* ethdev: The temporary flag RTE_ETH_DEV_CLOSE_REMOVE will be removed in 20.11.
-  As a consequence, the new behaviour introduced in 18.11 will be effective
-  for all drivers: generic port resources are freed on close operation.
-  Private resources are expected to be released in the ``dev_close`` callback.
-  More details in http://inbox.dpdk.org/dev/5248162.j6AOsuQRmx@thomas/
-
 * ethdev: New offload flags ``DEV_RX_OFFLOAD_FLOW_MARK`` will be added in 19.11.
   This will allow application to enable or disable PMDs from updating
   ``rte_mbuf::hash::fdir``.
diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
index 12c202cba4..25876224f8 100644
--- a/drivers/net/af_packet/rte_eth_af_packet.c
+++ b/drivers/net/af_packet/rte_eth_af_packet.c
@@ -859,7 +859,6 @@  rte_pmd_init_internals(struct rte_vdev_device *dev,
 	data->nb_tx_queues = (uint16_t)nb_queues;
 	data->dev_link = pmd_link;
 	data->mac_addrs = &(*internals)->eth_addr;
-	data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 	(*eth_dev)->dev_ops = &ops;
 
diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c
index badbce63fb..60add9ead4 100644
--- a/drivers/net/af_xdp/rte_eth_af_xdp.c
+++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
@@ -1274,8 +1274,6 @@  init_internals(struct rte_vdev_device *dev, const char *if_name,
 	eth_dev->dev_ops = &ops;
 	eth_dev->rx_pkt_burst = eth_af_xdp_rx;
 	eth_dev->tx_pkt_burst = eth_af_xdp_tx;
-	/* Let rte_eth_dev_close() release the port resources. */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 #if defined(XDP_UMEM_UNALIGNED_CHUNK_FLAG)
 	AF_XDP_LOG(INFO, "Zero copy between umem and mbuf enabled.\n");
diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c
index 5f2ed4b7b7..83dc4ecd2c 100644
--- a/drivers/net/ark/ark_ethdev.c
+++ b/drivers/net/ark/ark_ethdev.c
@@ -260,8 +260,6 @@  eth_ark_dev_init(struct rte_eth_dev *dev)
 	/* Use dummy function until setup */
 	dev->rx_pkt_burst = &eth_ark_recv_pkts_noop;
 	dev->tx_pkt_burst = &eth_ark_xmit_pkts_noop;
-	/* Let rte_eth_dev_close() release the port resources */
-	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 	ark->bar0 = (uint8_t *)pci_dev->mem_resource[0].addr;
 	ark->a_bar = (uint8_t *)pci_dev->mem_resource[2].addr;
diff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c
index d3babeff94..2217511ca0 100644
--- a/drivers/net/atlantic/atl_ethdev.c
+++ b/drivers/net/atlantic/atl_ethdev.c
@@ -380,8 +380,6 @@  eth_atl_dev_init(struct rte_eth_dev *eth_dev)
 	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
 		return 0;
 
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	/* Vendor and Device ID need to be set before init of shared code */
 	hw->device_id = pci_dev->id.device_id;
 	hw->vendor_id = pci_dev->id.vendor_id;
diff --git a/drivers/net/avp/avp_ethdev.c b/drivers/net/avp/avp_ethdev.c
index 2eed6acc3f..c730b7ab86 100644
--- a/drivers/net/avp/avp_ethdev.c
+++ b/drivers/net/avp/avp_ethdev.c
@@ -957,8 +957,6 @@  eth_avp_dev_init(struct rte_eth_dev *eth_dev)
 	eth_dev->dev_ops = &avp_eth_dev_ops;
 	eth_dev->rx_pkt_burst = &avp_recv_pkts;
 	eth_dev->tx_pkt_burst = &avp_xmit_pkts;
-	/* Let rte_eth_dev_close() release the port resources */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
 		/*
diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c
index 2dd64180ad..cf085487cc 100644
--- a/drivers/net/axgbe/axgbe_ethdev.c
+++ b/drivers/net/axgbe/axgbe_ethdev.c
@@ -1959,7 +1959,6 @@  eth_axgbe_dev_init(struct rte_eth_dev *eth_dev)
 	int ret;
 
 	eth_dev->dev_ops = &axgbe_eth_dev_ops;
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 	eth_dev->rx_descriptor_status = axgbe_dev_rx_descriptor_status;
 	eth_dev->tx_descriptor_status = axgbe_dev_tx_descriptor_status;
diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c
index 8dc46384af..40225b2f44 100644
--- a/drivers/net/bnx2x/bnx2x_ethdev.c
+++ b/drivers/net/bnx2x/bnx2x_ethdev.c
@@ -735,11 +735,6 @@  bnx2x_common_dev_init(struct rte_eth_dev *eth_dev, int is_vf)
 			goto out;
 	}
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	return 0;
 
 out:
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index e726d078ec..a77bab661d 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -5802,11 +5802,6 @@  bnxt_dev_init(struct rte_eth_dev *eth_dev, void *params __rte_unused)
 
 	bnxt_alloc_switch_domain(bp);
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	PMD_DRV_LOG(INFO,
 		    DRV_MODULE_NAME "found at mem %" PRIX64 ", node addr %pM\n",
 		    pci_dev->mem_resource[0].phys_addr,
diff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c
index 2b6c0a277b..df8680c113 100644
--- a/drivers/net/bnxt/bnxt_reps.c
+++ b/drivers/net/bnxt/bnxt_reps.c
@@ -203,10 +203,6 @@  int bnxt_vf_representor_init(struct rte_eth_dev *eth_dev, void *params)
 	PMD_DRV_LOG(INFO, "calling bnxt_print_link_info\n");
 	bnxt_print_link_info(eth_dev);
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 	PMD_DRV_LOG(INFO,
 		    "Switch domain id %d: Representor Device %d init done\n",
 		    vf_rep_bp->switch_domain_id, vf_rep_bp->vf_id);
diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index a9ed5d8e12..1f761c7c9e 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -3209,7 +3209,6 @@  bond_alloc(struct rte_vdev_device *dev, uint8_t mode)
 	}
 
 	internals = eth_dev->data->dev_private;
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 	eth_dev->data->nb_rx_queues = (uint16_t)1;
 	eth_dev->data->nb_tx_queues = (uint16_t)1;
 
diff --git a/drivers/net/cxgbe/cxgbe_main.c b/drivers/net/cxgbe/cxgbe_main.c
index da4ae25d47..53b08a64af 100644
--- a/drivers/net/cxgbe/cxgbe_main.c
+++ b/drivers/net/cxgbe/cxgbe_main.c
@@ -2142,8 +2142,6 @@  int cxgbe_probe(struct adapter *adapter)
 			goto out_free;
 		}
 
-		pi->eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 		if (i > 0) {
 			/* First port will be notified by upper layer */
 			rte_eth_dev_probing_finish(eth_dev);
diff --git a/drivers/net/cxgbe/cxgbevf_main.c b/drivers/net/cxgbe/cxgbevf_main.c
index 35d873402b..9ee060504f 100644
--- a/drivers/net/cxgbe/cxgbevf_main.c
+++ b/drivers/net/cxgbe/cxgbevf_main.c
@@ -261,8 +261,6 @@  int cxgbevf_probe(struct adapter *adapter)
 			goto out_free;
 		}
 
-		pi->eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 		if (i > 0) {
 			/* First port will be notified by upper layer */
 			rte_eth_dev_probing_finish(eth_dev);
diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index 8f986683e2..a01c8f3fc6 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -2127,7 +2127,6 @@  rte_dpaa_probe(struct rte_dpaa_driver *dpaa_drv,
 
 	qman_ern_register_cb(dpaa_free_mbuf);
 
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 	if (dpaa_drv->drv_flags & RTE_DPAA_DRV_INTR_LSC)
 		eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC;
 
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index 7bd3208a19..d8624514df 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -2793,7 +2793,6 @@  rte_dpaa2_probe(struct rte_dpaa2_driver *dpaa2_drv,
 	dpaa2_dev->eth_dev = eth_dev;
 	eth_dev->data->rx_mbuf_alloc_failed = 0;
 
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 	if (dpaa2_drv->drv_flags & RTE_DPAA2_DRV_INTR_LSC)
 		eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC;
 
diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c
index 2d0e071448..6a6ae0e9d5 100644
--- a/drivers/net/e1000/em_ethdev.c
+++ b/drivers/net/e1000/em_ethdev.c
@@ -297,11 +297,6 @@  eth_em_dev_init(struct rte_eth_dev *eth_dev)
 	rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.addr,
 		eth_dev->data->mac_addrs);
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	/* initialize the vfta */
 	memset(shadow_vfta, 0, sizeof(*shadow_vfta));
 
diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
index 9e4aefe00c..f8778207ef 100644
--- a/drivers/net/e1000/igb_ethdev.c
+++ b/drivers/net/e1000/igb_ethdev.c
@@ -841,11 +841,6 @@  eth_igb_dev_init(struct rte_eth_dev *eth_dev)
 	rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.addr,
 			&eth_dev->data->mac_addrs[0]);
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	/* initialize the vfta */
 	memset(shadow_vfta, 0, sizeof(*shadow_vfta));
 
@@ -997,11 +992,6 @@  eth_igbvf_dev_init(struct rte_eth_dev *eth_dev)
 		return -ENOMEM;
 	}
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	/* Generate a random MAC address, if none was assigned by PF. */
 	if (rte_is_zero_ether_addr(perm_addr)) {
 		rte_eth_random_addr(perm_addr->addr_bytes);
diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
index ae6daad892..cf1c0b9795 100644
--- a/drivers/net/ena/ena_ethdev.c
+++ b/drivers/net/ena/ena_ethdev.c
@@ -1863,12 +1863,6 @@  static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)
 			get_feat_ctx.dev_attr.mac_addr,
 			(struct rte_ether_addr *)adapter->mac_addr);
 
-	/*
-	 * Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	adapter->drv_stats = rte_zmalloc("adapter stats",
 					 sizeof(*adapter->drv_stats),
 					 RTE_CACHE_LINE_SIZE);
diff --git a/drivers/net/enetc/enetc_ethdev.c b/drivers/net/enetc/enetc_ethdev.c
index afb658df3d..325c93b92a 100644
--- a/drivers/net/enetc/enetc_ethdev.c
+++ b/drivers/net/enetc/enetc_ethdev.c
@@ -877,7 +877,6 @@  enetc_dev_init(struct rte_eth_dev *eth_dev)
 	eth_dev->dev_ops = &enetc_ops;
 	eth_dev->rx_pkt_burst = &enetc_recv_pkts;
 	eth_dev->tx_pkt_burst = &enetc_xmit_pkts;
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 	/* Retrieving and storing the HW base address of device */
 	hw->hw.reg = (void *)pci_dev->mem_resource[0].addr;
diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c
index ed03d53608..27f60b45b8 100644
--- a/drivers/net/enic/enic_ethdev.c
+++ b/drivers/net/enic/enic_ethdev.c
@@ -1292,8 +1292,6 @@  static int eth_enic_dev_init(struct rte_eth_dev *eth_dev,
 	enic->port_id = eth_dev->data->port_id;
 	enic->rte_dev = eth_dev;
 	enic->dev_data = eth_dev->data;
-	/* Let rte_eth_dev_close() release the port resources */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 	pdev = RTE_ETH_DEV_TO_PCI(eth_dev);
 	rte_eth_copy_pci_info(eth_dev, pdev);
diff --git a/drivers/net/enic/enic_vf_representor.c b/drivers/net/enic/enic_vf_representor.c
index c528be2b98..169c611a68 100644
--- a/drivers/net/enic/enic_vf_representor.c
+++ b/drivers/net/enic/enic_vf_representor.c
@@ -670,8 +670,7 @@  int enic_vf_representor_init(struct rte_eth_dev *eth_dev, void *init_params)
 
 	eth_dev->device->driver = pf->rte_dev->device->driver;
 	eth_dev->dev_ops = &enic_vf_representor_dev_ops;
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR
-		| RTE_ETH_DEV_CLOSE_REMOVE;
+	eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR;
 	eth_dev->data->representor_id = vf->vf_id;
 	eth_dev->data->mac_addrs = rte_zmalloc("enic_mac_addr_vf",
 		sizeof(struct rte_ether_addr) *
diff --git a/drivers/net/failsafe/failsafe.c b/drivers/net/failsafe/failsafe.c
index 44d47e8f72..b921e101e6 100644
--- a/drivers/net/failsafe/failsafe.c
+++ b/drivers/net/failsafe/failsafe.c
@@ -180,7 +180,6 @@  fs_eth_dev_create(struct rte_vdev_device *vdev)
 		ERROR("Unable to allocate rte_eth_dev");
 		return -1;
 	}
-	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 	priv = PRIV(dev);
 	priv->data = dev->data;
 	priv->rxp = FS_RX_PROXY_INIT;
diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
index 533f976709..23f4d04068 100644
--- a/drivers/net/fm10k/fm10k_ethdev.c
+++ b/drivers/net/fm10k/fm10k_ethdev.c
@@ -3129,11 +3129,6 @@  eth_fm10k_dev_init(struct rte_eth_dev *dev)
 		&dev->data->mac_addrs[0]);
 	}
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	/* Reset the hw statistics */
 	diag = fm10k_stats_reset(dev);
 	if (diag != 0) {
diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c
index 5f2e97d3bd..623534fda4 100644
--- a/drivers/net/hinic/hinic_pmd_ethdev.c
+++ b/drivers/net/hinic/hinic_pmd_ethdev.c
@@ -3100,12 +3100,6 @@  static int hinic_func_init(struct rte_eth_dev *eth_dev)
 		goto mc_addr_fail;
 	}
 
-	/*
-	 * Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	/* create hardware nic_device */
 	rc = hinic_nic_dev_create(eth_dev);
 	if (rc) {
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
index 3b395a1ccf..dd03bd62b2 100644
--- a/drivers/net/hns3/hns3_ethdev.c
+++ b/drivers/net/hns3/hns3_ethdev.c
@@ -5678,11 +5678,6 @@  hns3_dev_init(struct rte_eth_dev *eth_dev)
 			    &eth_dev->data->mac_addrs[0]);
 
 	hw->adapter_state = HNS3_NIC_INITIALIZED;
-	/*
-	 * Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 	if (rte_atomic16_read(&hns->hw.reset.schedule) == SCHEDULE_PENDING) {
 		hns3_err(hw, "Reschedule reset service after dev_init");
diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c
index e0ca5a6ac2..436d864b5f 100644
--- a/drivers/net/hns3/hns3_ethdev_vf.c
+++ b/drivers/net/hns3/hns3_ethdev_vf.c
@@ -2684,11 +2684,6 @@  hns3vf_dev_init(struct rte_eth_dev *eth_dev)
 			    &eth_dev->data->mac_addrs[0]);
 
 	hw->adapter_state = HNS3_NIC_INITIALIZED;
-	/*
-	 * Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 	if (rte_atomic16_read(&hns->hw.reset.schedule) == SCHEDULE_PENDING) {
 		hns3_err(hw, "Reschedule reset service after dev_init");
diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 804f0128ab..6fb88148b8 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -1699,11 +1699,6 @@  eth_i40e_dev_init(struct rte_eth_dev *dev, void *init_params __rte_unused)
 	rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.perm_addr,
 					&dev->data->mac_addrs[0]);
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	/* Init dcb to sw mode by default */
 	ret = i40e_dcb_init_configure(dev, TRUE);
 	if (ret != I40E_SUCCESS) {
diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c
index 61aad8c415..4aaf41956c 100644
--- a/drivers/net/i40e/i40e_ethdev_vf.c
+++ b/drivers/net/i40e/i40e_ethdev_vf.c
@@ -1586,11 +1586,6 @@  i40evf_dev_init(struct rte_eth_dev *eth_dev)
 	hw->adapter_stopped = 1;
 	hw->adapter_closed = 0;
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	if(i40evf_init_vf(eth_dev) != 0) {
 		PMD_INIT_LOG(ERR, "Init vf failed");
 		return -1;
diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
index 8f46c4588f..512ade2ad0 100644
--- a/drivers/net/iavf/iavf_ethdev.c
+++ b/drivers/net/iavf/iavf_ethdev.c
@@ -1412,11 +1412,6 @@  iavf_dev_init(struct rte_eth_dev *eth_dev)
 	adapter->eth_dev = eth_dev;
 	adapter->stopped = 1;
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	if (iavf_init_vf(eth_dev) != 0) {
 		PMD_INIT_LOG(ERR, "Init vf failed");
 		return -1;
diff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c
index 5b626cb641..33dd0c44f2 100644
--- a/drivers/net/ice/ice_dcf_ethdev.c
+++ b/drivers/net/ice/ice_dcf_ethdev.c
@@ -908,8 +908,6 @@  ice_dcf_dev_init(struct rte_eth_dev *eth_dev)
 	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
 		return 0;
 
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	adapter->real_hw.vc_event_msg_cb = ice_dcf_handle_pf_event_msg;
 	if (ice_dcf_init_hw(eth_dev, &adapter->real_hw) != 0) {
 		PMD_INIT_LOG(ERR, "Failed to init DCF hardware");
diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
index b4ac5e3f81..85a3ca6a2d 100644
--- a/drivers/net/ice/ice_ethdev.c
+++ b/drivers/net/ice/ice_ethdev.c
@@ -2245,11 +2245,6 @@  ice_dev_init(struct rte_eth_dev *dev)
 		goto err_init_mac;
 	}
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	ret = ice_res_pool_init(&pf->msix_pool, 1,
 				hw->func_caps.common_cap.num_msix_vectors - 1);
 	if (ret) {
diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c
index 11397c5c1d..9d27fc0d07 100644
--- a/drivers/net/igc/igc_ethdev.c
+++ b/drivers/net/igc/igc_ethdev.c
@@ -1323,11 +1323,6 @@  eth_igc_dev_init(struct rte_eth_dev *dev)
 		goto err_late;
 	}
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	hw->mac.get_link_status = 1;
 	igc->stopped = 0;
 
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 5a863ca4bf..600e9d6928 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -1248,11 +1248,6 @@  eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
 		return -ENOMEM;
 	}
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	/* initialize the vfta */
 	memset(shadow_vfta, 0, sizeof(*shadow_vfta));
 
@@ -1663,11 +1658,6 @@  eth_ixgbevf_dev_init(struct rte_eth_dev *eth_dev)
 		return -ENOMEM;
 	}
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	/* Generate a random MAC address, if none was assigned by PF. */
 	if (rte_is_zero_ether_addr(perm_addr)) {
 		generate_random_mac_addr(perm_addr);
diff --git a/drivers/net/kni/rte_eth_kni.c b/drivers/net/kni/rte_eth_kni.c
index aa365a57de..45ab1b17a8 100644
--- a/drivers/net/kni/rte_eth_kni.c
+++ b/drivers/net/kni/rte_eth_kni.c
@@ -387,8 +387,6 @@  eth_kni_create(struct rte_vdev_device *vdev,
 	data->promiscuous = 1;
 	data->all_multicast = 1;
 
-	data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	rte_eth_random_addr(internals->eth_addr.addr_bytes);
 
 	eth_dev->dev_ops = &eth_kni_ops;
diff --git a/drivers/net/memif/rte_eth_memif.c b/drivers/net/memif/rte_eth_memif.c
index 1a2411c838..ff8a58081f 100644
--- a/drivers/net/memif/rte_eth_memif.c
+++ b/drivers/net/memif/rte_eth_memif.c
@@ -1527,9 +1527,6 @@  memif_create(struct rte_vdev_device *vdev, enum memif_role_t role,
 		eth_dev->tx_pkt_burst = eth_memif_tx;
 	}
 
-
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	rte_eth_dev_probing_finish(eth_dev);
 
 	return 0;
diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c
index ad7c805d67..3e57875414 100644
--- a/drivers/net/mlx4/mlx4.c
+++ b/drivers/net/mlx4/mlx4.c
@@ -1027,7 +1027,6 @@  mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
 			ERROR("can not allocate rte ethdev");
 			goto port_error;
 		}
-		eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 		eth_dev->data->dev_private = priv;
 		eth_dev->data->mac_addrs = priv->mac;
 		eth_dev->device = &pci_dev->device;
diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index 0511a55a28..8e498314ef 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -1155,8 +1155,6 @@  mlx5_dev_spawn(struct rte_device *dpdk_dev,
 		err = ENOMEM;
 		goto error;
 	}
-	/* Flag to call rte_eth_dev_release_port() in rte_eth_dev_close(). */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 	if (priv->representor) {
 		eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR;
 		eth_dev->data->representor_id = priv->representor_id;
diff --git a/drivers/net/mvneta/mvneta_ethdev.c b/drivers/net/mvneta/mvneta_ethdev.c
index eebcdb840e..db142bec23 100644
--- a/drivers/net/mvneta/mvneta_ethdev.c
+++ b/drivers/net/mvneta/mvneta_ethdev.c
@@ -834,9 +834,6 @@  mvneta_eth_dev_create(struct rte_vdev_device *vdev, const char *name)
 	mvneta_set_tx_function(eth_dev);
 	eth_dev->dev_ops = &mvneta_ops;
 
-	/* Flag to call rte_eth_dev_release_port() in rte_eth_dev_close(). */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	rte_eth_dev_probing_finish(eth_dev);
 	return 0;
 out_free:
diff --git a/drivers/net/mvpp2/mrvl_ethdev.c b/drivers/net/mvpp2/mrvl_ethdev.c
index 27f7cfb056..cfb97e4f8f 100644
--- a/drivers/net/mvpp2/mrvl_ethdev.c
+++ b/drivers/net/mvpp2/mrvl_ethdev.c
@@ -2863,9 +2863,6 @@  mrvl_eth_dev_create(struct rte_vdev_device *vdev, const char *name)
 	mrvl_set_tx_function(eth_dev);
 	eth_dev->dev_ops = &mrvl_ops;
 
-	/* Flag to call rte_eth_dev_release_port() in rte_eth_dev_close(). */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	rte_eth_dev_probing_finish(eth_dev);
 	return 0;
 out_free:
diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c
index 8968036ea3..15d6e9762d 100644
--- a/drivers/net/netvsc/hn_ethdev.c
+++ b/drivers/net/netvsc/hn_ethdev.c
@@ -123,9 +123,6 @@  eth_dev_vmbus_allocate(struct rte_vmbus_device *dev, size_t private_data_size)
 	eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC;
 	eth_dev->intr_handle = &dev->intr_handle;
 
-	/* allow ethdev to remove on close */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	return eth_dev;
 }
 
diff --git a/drivers/net/nfb/nfb_ethdev.c b/drivers/net/nfb/nfb_ethdev.c
index c3c3d003f1..d937ac6922 100644
--- a/drivers/net/nfb/nfb_ethdev.c
+++ b/drivers/net/nfb/nfb_ethdev.c
@@ -457,9 +457,6 @@  nfb_eth_dev_init(struct rte_eth_dev *dev)
 		rte_kvargs_free(kvlist);
 	}
 
-	/* Let rte_eth_dev_close() release the port resources */
-	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	/*
 	 * Get number of available DMA RX and TX queues, which is maximum
 	 * number of queues that can be created and store it in private device
diff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c
index 84c1d0c951..7c3c76a897 100644
--- a/drivers/net/null/rte_eth_null.c
+++ b/drivers/net/null/rte_eth_null.c
@@ -548,7 +548,6 @@  eth_dev_null_create(struct rte_vdev_device *dev, struct pmd_options *args)
 	data->mac_addrs = &internals->eth_addr;
 	data->promiscuous = 1;
 	data->all_multicast = 1;
-	data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 	eth_dev->dev_ops = &ops;
 
diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c
index 48ce3e1621..a263f45399 100644
--- a/drivers/net/octeontx/octeontx_ethdev.c
+++ b/drivers/net/octeontx/octeontx_ethdev.c
@@ -1374,7 +1374,6 @@  octeontx_create(struct rte_vdev_device *dev, int port, uint8_t evdev,
 	data->promiscuous = 0;
 	data->all_multicast = 0;
 	data->scattered_rx = 0;
-	data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 	/* Get maximum number of supported MAC entries */
 	max_entries = octeontx_bgx_port_mac_entries_get(nic->port_id);
diff --git a/drivers/net/octeontx2/otx2_ethdev.c b/drivers/net/octeontx2/otx2_ethdev.c
index abe5f03628..581ac89381 100644
--- a/drivers/net/octeontx2/otx2_ethdev.c
+++ b/drivers/net/octeontx2/otx2_ethdev.c
@@ -2394,7 +2394,6 @@  otx2_eth_dev_init(struct rte_eth_dev *eth_dev)
 	pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
 
 	rte_eth_copy_pci_info(eth_dev, pci_dev);
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 	/* Zero out everything after OTX2_DEV to allow proper dev_reset() */
 	memset(&dev->otx2_eth_dev_data_start, 0, sizeof(*dev) -
diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c
index 909eef8cce..da4988064a 100644
--- a/drivers/net/pcap/rte_eth_pcap.c
+++ b/drivers/net/pcap/rte_eth_pcap.c
@@ -1334,7 +1334,6 @@  eth_from_pcaps(struct rte_vdev_device *vdev,
 	else
 		eth_dev->tx_pkt_burst = eth_tx_drop;
 
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 	rte_eth_dev_probing_finish(eth_dev);
 	return 0;
 }
diff --git a/drivers/net/pfe/pfe_ethdev.c b/drivers/net/pfe/pfe_ethdev.c
index 55f2fea4b2..bb2ae0df34 100644
--- a/drivers/net/pfe/pfe_ethdev.c
+++ b/drivers/net/pfe/pfe_ethdev.c
@@ -846,8 +846,6 @@  pfe_eth_init(struct rte_vdev_device *vdev, struct pfe *pfe, int id)
 	eth_dev->data->nb_rx_queues = 1;
 	eth_dev->data->nb_tx_queues = 1;
 
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	/* For link status, open the PFE CDEV; Error from this function
 	 * is silently ignored; In case of error, the link status will not
 	 * be available.
diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index 43fe68c2bf..cd578709fb 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -2711,11 +2711,6 @@  static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)
 		adapter->ipgre.enable = false;
 	}
 
-	/* Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	DP_INFO(edev, "MAC address : %02x:%02x:%02x:%02x:%02x:%02x\n",
 		adapter->primary_mac.addr_bytes[0],
 		adapter->primary_mac.addr_bytes[1],
diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c
index ed0fdeb28f..12046f5a00 100644
--- a/drivers/net/ring/rte_eth_ring.c
+++ b/drivers/net/ring/rte_eth_ring.c
@@ -358,7 +358,6 @@  do_eth_dev_ring_create(const char *name,
 
 	eth_dev->dev_ops = &ops;
 	data->numa_node = numa_node;
-	data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 	/* finally assign rx and tx ops */
 	eth_dev->rx_pkt_burst = eth_ring_rx;
diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
index eaa48627d6..1c72e40b75 100644
--- a/drivers/net/sfc/sfc_ethdev.c
+++ b/drivers/net/sfc/sfc_ethdev.c
@@ -343,7 +343,7 @@  sfc_dev_close(struct rte_eth_dev *dev)
 	}
 
 	/*
-	 * Cleanup all resources in accordance with RTE_ETH_DEV_CLOSE_REMOVE.
+	 * Cleanup all resources.
 	 * Rollback primary process sfc_eth_dev_init() below.
 	 */
 
@@ -2179,8 +2179,6 @@  sfc_eth_dev_init(struct rte_eth_dev *dev)
 
 	sfc_log_init(sa, "entry");
 
-	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	dev->data->mac_addrs = rte_zmalloc("sfc", RTE_ETHER_ADDR_LEN, 0);
 	if (dev->data->mac_addrs == NULL) {
 		rc = ENOMEM;
diff --git a/drivers/net/softnic/rte_eth_softnic.c b/drivers/net/softnic/rte_eth_softnic.c
index ad9e2aa86d..e942df78b6 100644
--- a/drivers/net/softnic/rte_eth_softnic.c
+++ b/drivers/net/softnic/rte_eth_softnic.c
@@ -390,7 +390,6 @@  pmd_ethdev_register(struct rte_vdev_device *vdev,
 	dev->device = &vdev->device;
 
 	/* dev->data */
-	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 	dev->data->dev_private = dev_private;
 	dev->data->dev_link.link_speed = ETH_SPEED_NUM_100G;
 	dev->data->dev_link.link_duplex = ETH_LINK_FULL_DUPLEX;
diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c
index daa40cfd6c..4325b9a30d 100644
--- a/drivers/net/szedata2/rte_eth_szedata2.c
+++ b/drivers/net/szedata2/rte_eth_szedata2.c
@@ -1488,9 +1488,6 @@  rte_szedata2_eth_dev_init(struct rte_eth_dev *dev, struct port_info *pi)
 	PMD_INIT_LOG(INFO, "Initializing eth_dev %s (driver %s)", data->name,
 			RTE_STR(RTE_SZEDATA2_DRIVER_NAME));
 
-	/* Let rte_eth_dev_close() release the port resources */
-	dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	/* Fill internal private structure. */
 	internals->dev = dev;
 	/* Get index of szedata2 device file and create path to device file */
diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index 0d217f1486..b127ce62dc 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -1922,7 +1922,7 @@  eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name,
 	/* Setup some default values */
 	data = dev->data;
 	data->dev_private = pmd;
-	data->dev_flags = RTE_ETH_DEV_INTR_LSC | RTE_ETH_DEV_CLOSE_REMOVE;
+	data->dev_flags = RTE_ETH_DEV_INTR_LSC;
 	data->numa_node = numa_node;
 
 	data->dev_link = pmd_link;
diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
index f67f4db812..45552ef742 100644
--- a/drivers/net/vhost/rte_eth_vhost.c
+++ b/drivers/net/vhost/rte_eth_vhost.c
@@ -1443,7 +1443,7 @@  eth_dev_vhost_create(struct rte_vdev_device *dev, char *iface_name,
 	internal->flags = flags;
 	internal->disable_flags = disable_flags;
 	data->dev_link = pmd_link;
-	data->dev_flags = RTE_ETH_DEV_INTR_LSC | RTE_ETH_DEV_CLOSE_REMOVE;
+	data->dev_flags = RTE_ETH_DEV_INTR_LSC;
 	data->promiscuous = 1;
 	data->all_multicast = 1;
 
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
index 0787337a01..b6ed5829bd 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -1924,11 +1924,6 @@  eth_virtio_dev_init(struct rte_eth_dev *eth_dev)
 	if (ret < 0)
 		return ret;
 	hw->speed = speed;
-	/*
-	 * Pass the information to the rte_eth_dev_close() that it should also
-	 * release the private port resources.
-	 */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
 	/* Allocate memory for storing MAC addresses */
 	eth_dev->data->mac_addrs = rte_zmalloc("virtio",
diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
index 17fed0ed6e..34a169d2c0 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
@@ -321,9 +321,6 @@  eth_vmxnet3_dev_init(struct rte_eth_dev *eth_dev)
 		     hw->perm_addr[0], hw->perm_addr[1], hw->perm_addr[2],
 		     hw->perm_addr[3], hw->perm_addr[4], hw->perm_addr[5]);
 
-	/* Flag to call rte_eth_dev_release_port() in rte_eth_dev_close(). */
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
-
 	/* Put device in Quiesce Mode */
 	VMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_CMD, VMXNET3_CMD_QUIESCE_DEV);
 
diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index d12d74dd8c..d7668114ca 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -1720,22 +1720,7 @@  rte_eth_dev_close(uint16_t port_id)
 	(*dev->dev_ops->dev_close)(dev);
 
 	rte_ethdev_trace_close(port_id);
-	/* check behaviour flag - temporary for PMD migration */
-	if ((dev->data->dev_flags & RTE_ETH_DEV_CLOSE_REMOVE) != 0) {
-		/* new behaviour: send event + reset state + free all data */
-		rte_eth_dev_release_port(dev);
-		return;
-	}
-	RTE_ETHDEV_LOG(DEBUG, "Port closing is using an old behaviour.\n"
-			"The driver %s should migrate to the new behaviour.\n",
-			dev->device->driver->name);
-	/* old behaviour: only free queue arrays */
-	dev->data->nb_rx_queues = 0;
-	rte_free(dev->data->rx_queues);
-	dev->data->rx_queues = NULL;
-	dev->data->nb_tx_queues = 0;
-	rte_free(dev->data->tx_queues);
-	dev->data->tx_queues = NULL;
+	rte_eth_dev_release_port(dev);
 }
 
 int
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index 645a18664d..24d898ae89 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -1654,11 +1654,6 @@  struct rte_eth_dev_owner {
 	char name[RTE_ETH_MAX_OWNER_NAME_LEN]; /**< The owner name. */
 };
 
-/**
- * Port is released (i.e. totally freed and data erased) on close.
- * Temporary flag for PMD migration to new rte_eth_dev_close() behaviour.
- */
-#define RTE_ETH_DEV_CLOSE_REMOVE 0x0001
 /** Device supports link state interrupt */
 #define RTE_ETH_DEV_INTR_LSC     0x0002
 /** Device is a bonded slave */
@@ -2282,8 +2277,7 @@  int rte_eth_dev_set_link_down(uint16_t port_id);
 
 /**
  * Close a stopped Ethernet device. The device cannot be restarted!
- * The function frees all port resources if the driver supports
- * the flag RTE_ETH_DEV_CLOSE_REMOVE.
+ * The function frees all port resources.
  *
  * @param port_id
  *   The port identifier of the Ethernet device.