[dpdk-dev] [PATCH v3 21/29] ethdev: remove old close behaviour

Guo, Jia jia.guo at intel.com
Tue Sep 29 07:55:44 CEST 2020


For drivers/net/i40e,

Acked-by: Jeff Guo <jia.guo at intel.com>

> -----Original Message-----
> From: Thomas Monjalon <thomas at monjalon.net>
> Sent: Tuesday, September 29, 2020 7:14 AM
> To: dev at dpdk.org
> Cc: Yigit, Ferruh <ferruh.yigit at intel.com>; arybchenko at solarflare.com;
> Shijith Thotton <sthotton at marvell.com>; Srisivasubramanian Srinivasan
> <srinivasan at marvell.com>; Heinrich Kuhn
> <heinrich.kuhn at netronome.com>; Alfredo Cardigliano
> <cardigliano at ntop.org>; Liron Himi <lironh at marvell.com>; Ray Kinsella
> <mdr at ashroe.eu>; Neil Horman <nhorman at tuxdriver.com>; John W.
> Linville <linville at tuxdriver.com>; Loftus, Ciara <ciara.loftus at intel.com>;
> Zhang, Qi Z <qi.z.zhang at intel.com>; Shepard Siegel
> <shepard.siegel at atomicrules.com>; Ed Czeck <ed.czeck at atomicrules.com>;
> John Miller <john.miller at atomicrules.com>; Igor Russkikh
> <igor.russkikh at aquantia.com>; Pavel Belous <pavel.belous at aquantia.com>;
> Steven Webster <steven.webster at windriver.com>; Matt Peters
> <matt.peters at windriver.com>; Somalapuram Amaranath
> <asomalap at amd.com>; Rasesh Mody <rmody at marvell.com>; Shahed
> Shaikh <shshaikh at marvell.com>; Ajit Khaparde
> <ajit.khaparde at broadcom.com>; Somnath Kotur
> <somnath.kotur at broadcom.com>; Chas Williams <chas3 at att.com>; Wei Hu
> (Xavier) <xavier.huwei at huawei.com>; Rahul Lakkireddy
> <rahul.lakkireddy at chelsio.com>; Hemant Agrawal
> <hemant.agrawal at nxp.com>; Sachin Saxena <sachin.saxena at oss.nxp.com>;
> Guo, Jia <jia.guo at intel.com>; Wang, Haiyue <haiyue.wang at intel.com>;
> Marcin Wojtas <mw at semihalf.com>; Michal Krawczyk <mk at semihalf.com>;
> Guy Tzalik <gtzalik at amazon.com>; Evgeny Schemeilin
> <evgenys at amazon.com>; Igor Chauskin <igorch at amazon.com>;
> Gagandeep Singh <g.singh at nxp.com>; John Daley <johndale at cisco.com>;
> Hyong Youb Kim <hyonkim at cisco.com>; Gaetan Rivet <grive at u256.net>;
> Wang, Xiao W <xiao.w.wang at intel.com>; Ziyang Xuan
> <xuanziyang2 at huawei.com>; Xiaoyun Wang
> <cloud.wangxiaoyun at huawei.com>; Guoyang Zhou
> <zhouguoyang at huawei.com>; Min Hu (Connor) <humin29 at huawei.com>;
> Yisen Zhuang <yisen.zhuang at huawei.com>; Xing, Beilei
> <beilei.xing at intel.com>; Wu, Jingjing <jingjing.wu at intel.com>; Yang, Qiming
> <qiming.yang at intel.com>; Jakub Grajciar <jgrajcia at cisco.com>; Matan
> Azrad <matan at nvidia.com>; Shahaf Shuler <shahafs at nvidia.com>;
> Viacheslav Ovsiienko <viacheslavo at nvidia.com>; Zyta Szpak
> <zr at semihalf.com>; Stephen Hemminger <sthemmin at microsoft.com>; K. Y.
> Srinivasan <kys at microsoft.com>; Haiyang Zhang <haiyangz at microsoft.com>;
> Long Li <longli at microsoft.com>; Martin Spinler <spinler at cesnet.cz>;
> Tetsuya Mukawa <mtetsuyah at gmail.com>; Harman Kalra
> <hkalra at marvell.com>; Jerin Jacob <jerinj at marvell.com>; Nithin Dabilpuram
> <ndabilpuram at marvell.com>; Kiran Kumar K <kirankumark at marvell.com>;
> Akhil Goyal <akhil.goyal at nxp.com>; Richardson, Bruce
> <bruce.richardson at intel.com>; Singh, Jasvinder
> <jasvinder.singh at intel.com>; Dumitrescu, Cristian
> <cristian.dumitrescu at intel.com>; Wiles, Keith <keith.wiles at intel.com>;
> Maxime Coquelin <maxime.coquelin at redhat.com>; Xia, Chenbo
> <chenbo.xia at intel.com>; Wang, Zhihong <zhihong.wang at intel.com>; Yong
> Wang <yongwang at 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 at marvell.com>
> Cc: Srisivasubramanian Srinivasan <srinivasan at marvell.com>
> Cc: Heinrich Kuhn <heinrich.kuhn at netronome.com>
> Cc: Alfredo Cardigliano <cardigliano at ntop.org>
> 
> Signed-off-by: Thomas Monjalon <thomas at monjalon.net>
> Reviewed-by: Liron Himi <lironh at 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 at marvell.com>
>  M: Srisivasubramanian Srinivasan <srinivasan at 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 at 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 at 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



More information about the dev mailing list