On 9/13/2020 11:07 PM, 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:
> bnx2x, cxgbe, dpaa, dpaa2, enetc, ionic,
> ipn3ke, liquidio, nfp, pfe, qede
> 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.
For this note, 'rte_eth_dev_close()' assumes port stopped and sets
"dev->data->dev_started = 0;" blindly.
should we verify this, or perhaps should call 'rte_eth_dev_stop()'
within the 'rte_eth_dev_close()' to be sure.
Also many PMDs doesn't check primary process check in the close, which
should be fixed too, I wonder if it can be fixed in this series?
> -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
> @@ -622,7 +622,7 @@ F: drivers/net/octeontx/
> F: doc/guides/nics/octeontx.rst
> F: doc/guides/nics/features/octeontx.ini
>
> -Chelsio cxgbe
> +Chelsio cxgbe - UNMAINTAINED
> M: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>
> F: drivers/net/cxgbe/
> F: doc/guides/nics/cxgbe.rst
> @@ -711,7 +711,7 @@ F: drivers/net/igc/
> F: doc/guides/nics/igc.rst
> F: doc/guides/nics/features/igc.ini
>
> -Intel ipn3ke
> +Intel ipn3ke - UNMAINTAINED
> M: Rosen Xu <rosen.xu@intel.com>
> T: git://dpdk.org/next/dpdk-next-net-intel
> F: drivers/net/ipn3ke/
> @@ -794,13 +794,13 @@ 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
> F: doc/guides/nics/features/nfp*.ini
>
> -NXP dpaa
> +NXP dpaa - UNMAINTAINED
> M: Hemant Agrawal <hemant.agrawal@nxp.com>
> M: Sachin Saxena <sachin.saxena@nxp.com>
> F: drivers/mempool/dpaa/
> @@ -808,7 +808,7 @@ F: drivers/net/dpaa/
> F: doc/guides/nics/dpaa.rst
> F: doc/guides/nics/features/dpaa.ini
>
> -NXP dpaa2
> +NXP dpaa2 - UNMAINTAINED
> M: Hemant Agrawal <hemant.agrawal@nxp.com>
> M: Sachin Saxena <sachin.saxena@nxp.com>
> F: drivers/mempool/dpaa2/
> @@ -816,27 +816,27 @@ F: drivers/net/dpaa2/
> F: doc/guides/nics/dpaa2.rst
> F: doc/guides/nics/features/dpaa2.ini
>
> -NXP enetc
> +NXP enetc - UNMAINTAINED
> M: Gagandeep Singh <g.singh@nxp.com>
> M: Sachin Saxena <sachin.saxena@nxp.com>
> F: drivers/net/enetc/
> F: doc/guides/nics/enetc.rst
> F: doc/guides/nics/features/enetc.ini
>
> -NXP pfe
> +NXP pfe - UNMAINTAINED
> M: Gagandeep Singh <g.singh@nxp.com>
> M: Akhil Goyal <akhil.goyal@nxp.com>
> 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
> F: doc/guides/nics/features/ionic.ini
>
> -QLogic bnx2x
> +QLogic bnx2x - UNMAINTAINED
> M: Rasesh Mody <rmody@marvell.com>
> M: Shahed Shaikh <shshaikh@marvell.com>
> T: git://dpdk.org/next/dpdk-next-net-mrvl
> @@ -844,7 +844,7 @@ F: drivers/net/bnx2x/
> F: doc/guides/nics/bnx2x.rst
> F: doc/guides/nics/features/bnx2x*.ini
>
> -QLogic qede PMD
> +QLogic qede PMD - UNMAINTAINED
I guess 'cxgbe' already send the patch, but for rest, is there a
deadline for the patches, before mark them as "UNMAINTAINED"?
Hi Thomas, Ferruh,
>From: dev <dev-bounces@dpdk.org> On Behalf Of Ferruh Yigit
>Sent: Wednesday, September 23, 2020 9:45 AM
>
>On 9/13/2020 11:07 PM, 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:
>> bnx2x, cxgbe, dpaa, dpaa2, enetc, ionic,
>> ipn3ke, liquidio, nfp, pfe, qede
>> 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.
>
>For this note, 'rte_eth_dev_close()' assumes port stopped and sets "dev-
>>data->dev_started = 0;" blindly.
>
>should we verify this, or perhaps should call 'rte_eth_dev_stop()'
>within the 'rte_eth_dev_close()' to be sure.
>
>
>Also many PMDs doesn't check primary process check in the close, which
>should be fixed too, I wonder if it can be fixed in this series?
>
>
>> -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
>> @@ -622,7 +622,7 @@ F: drivers/net/octeontx/
>> F: doc/guides/nics/octeontx.rst
>> F: doc/guides/nics/features/octeontx.ini
>>
>> -Chelsio cxgbe
>> +Chelsio cxgbe - UNMAINTAINED
>> M: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>
>> F: drivers/net/cxgbe/
>> F: doc/guides/nics/cxgbe.rst
>> @@ -711,7 +711,7 @@ F: drivers/net/igc/
>> F: doc/guides/nics/igc.rst
>> F: doc/guides/nics/features/igc.ini
>>
>> -Intel ipn3ke
>> +Intel ipn3ke - UNMAINTAINED
>> M: Rosen Xu <rosen.xu@intel.com>
>> T: git://dpdk.org/next/dpdk-next-net-intel
>> F: drivers/net/ipn3ke/
>> @@ -794,13 +794,13 @@ 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
>> F: doc/guides/nics/features/nfp*.ini
>>
>> -NXP dpaa
>> +NXP dpaa - UNMAINTAINED
>> M: Hemant Agrawal <hemant.agrawal@nxp.com>
>> M: Sachin Saxena <sachin.saxena@nxp.com>
>> F: drivers/mempool/dpaa/
>> @@ -808,7 +808,7 @@ F: drivers/net/dpaa/
>> F: doc/guides/nics/dpaa.rst
>> F: doc/guides/nics/features/dpaa.ini
>>
>> -NXP dpaa2
>> +NXP dpaa2 - UNMAINTAINED
>> M: Hemant Agrawal <hemant.agrawal@nxp.com>
>> M: Sachin Saxena <sachin.saxena@nxp.com>
>> F: drivers/mempool/dpaa2/
>> @@ -816,27 +816,27 @@ F: drivers/net/dpaa2/
>> F: doc/guides/nics/dpaa2.rst
>> F: doc/guides/nics/features/dpaa2.ini
>>
>> -NXP enetc
>> +NXP enetc - UNMAINTAINED
>> M: Gagandeep Singh <g.singh@nxp.com>
>> M: Sachin Saxena <sachin.saxena@nxp.com>
>> F: drivers/net/enetc/
>> F: doc/guides/nics/enetc.rst
>> F: doc/guides/nics/features/enetc.ini
>>
>> -NXP pfe
>> +NXP pfe - UNMAINTAINED
>> M: Gagandeep Singh <g.singh@nxp.com>
>> M: Akhil Goyal <akhil.goyal@nxp.com>
>> 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
>> F: doc/guides/nics/features/ionic.ini
>>
>> -QLogic bnx2x
>> +QLogic bnx2x - UNMAINTAINED
>> M: Rasesh Mody <rmody@marvell.com>
>> M: Shahed Shaikh <shshaikh@marvell.com>
>> T: git://dpdk.org/next/dpdk-next-net-mrvl
>> @@ -844,7 +844,7 @@ F: drivers/net/bnx2x/
>> F: doc/guides/nics/bnx2x.rst
>> F: doc/guides/nics/features/bnx2x*.ini
>>
>> -QLogic qede PMD
>> +QLogic qede PMD - UNMAINTAINED
>
>I guess 'cxgbe' already send the patch, but for rest, is there a
>deadline for the patches, before mark them as "UNMAINTAINED"?
The pending PMD changes just dropped off the radar for quite some time. The patches for bnx2x and qede PMDs are submitted for 20.11 release, please apply.
Thanks!
-Rasesh
@@ -605,7 +605,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
@@ -622,7 +622,7 @@ F: drivers/net/octeontx/
F: doc/guides/nics/octeontx.rst
F: doc/guides/nics/features/octeontx.ini
-Chelsio cxgbe
+Chelsio cxgbe - UNMAINTAINED
M: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>
F: drivers/net/cxgbe/
F: doc/guides/nics/cxgbe.rst
@@ -711,7 +711,7 @@ F: drivers/net/igc/
F: doc/guides/nics/igc.rst
F: doc/guides/nics/features/igc.ini
-Intel ipn3ke
+Intel ipn3ke - UNMAINTAINED
M: Rosen Xu <rosen.xu@intel.com>
T: git://dpdk.org/next/dpdk-next-net-intel
F: drivers/net/ipn3ke/
@@ -794,13 +794,13 @@ 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
F: doc/guides/nics/features/nfp*.ini
-NXP dpaa
+NXP dpaa - UNMAINTAINED
M: Hemant Agrawal <hemant.agrawal@nxp.com>
M: Sachin Saxena <sachin.saxena@nxp.com>
F: drivers/mempool/dpaa/
@@ -808,7 +808,7 @@ F: drivers/net/dpaa/
F: doc/guides/nics/dpaa.rst
F: doc/guides/nics/features/dpaa.ini
-NXP dpaa2
+NXP dpaa2 - UNMAINTAINED
M: Hemant Agrawal <hemant.agrawal@nxp.com>
M: Sachin Saxena <sachin.saxena@nxp.com>
F: drivers/mempool/dpaa2/
@@ -816,27 +816,27 @@ F: drivers/net/dpaa2/
F: doc/guides/nics/dpaa2.rst
F: doc/guides/nics/features/dpaa2.ini
-NXP enetc
+NXP enetc - UNMAINTAINED
M: Gagandeep Singh <g.singh@nxp.com>
M: Sachin Saxena <sachin.saxena@nxp.com>
F: drivers/net/enetc/
F: doc/guides/nics/enetc.rst
F: doc/guides/nics/features/enetc.ini
-NXP pfe
+NXP pfe - UNMAINTAINED
M: Gagandeep Singh <g.singh@nxp.com>
M: Akhil Goyal <akhil.goyal@nxp.com>
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
F: doc/guides/nics/features/ionic.ini
-QLogic bnx2x
+QLogic bnx2x - UNMAINTAINED
M: Rasesh Mody <rmody@marvell.com>
M: Shahed Shaikh <shshaikh@marvell.com>
T: git://dpdk.org/next/dpdk-next-net-mrvl
@@ -844,7 +844,7 @@ F: drivers/net/bnx2x/
F: doc/guides/nics/bnx2x.rst
F: doc/guides/nics/features/bnx2x*.ini
-QLogic qede PMD
+QLogic qede PMD - UNMAINTAINED
M: Rasesh Mody <rmody@marvell.com>
M: Shahed Shaikh <shshaikh@marvell.com>
T: git://dpdk.org/next/dpdk-next-net-mrvl
@@ -189,12 +189,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``.
@@ -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;
@@ -1269,8 +1269,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");
@@ -261,8 +261,6 @@ eth_ark_dev_init(struct rte_eth_dev *dev)
/* Use dummy function until setup */
dev->rx_pkt_burst = ð_ark_recv_pkts_noop;
dev->tx_pkt_burst = ð_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;
@@ -379,8 +379,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;
@@ -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) {
/*
@@ -1623,7 +1623,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;
/*
* For secondary processes, we don't initialise any further as primary
@@ -5744,11 +5744,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,
@@ -186,10 +186,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);
@@ -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;
@@ -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));
@@ -844,11 +844,6 @@ eth_igb_dev_init(struct rte_eth_dev *eth_dev)
rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.addr,
ð_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);
@@ -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);
@@ -1293,8 +1293,6 @@ static int eth_enicpmd_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);
@@ -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;
@@ -3132,11 +3132,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) {
@@ -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) {
@@ -5528,11 +5528,6 @@ hns3_dev_init(struct rte_eth_dev *eth_dev)
ð_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");
@@ -2576,11 +2576,6 @@ hns3vf_dev_init(struct rte_eth_dev *eth_dev)
rte_ether_addr_copy((struct rte_ether_addr *)hw->mac.mac_addr,
ð_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");
@@ -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) {
@@ -1543,11 +1543,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;
@@ -1362,11 +1362,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;
@@ -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");
@@ -2206,11 +2206,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) {
@@ -1324,11 +1324,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;
@@ -1251,11 +1251,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);
@@ -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 = ð_kni_ops;
@@ -1512,9 +1512,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;
@@ -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;
@@ -1136,8 +1136,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;
@@ -835,9 +835,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:
@@ -2864,9 +2864,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:
@@ -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;
}
@@ -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
@@ -545,7 +545,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;
@@ -1375,7 +1375,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);
@@ -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) -
@@ -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;
}
@@ -356,7 +356,6 @@ do_eth_dev_ring_create(const char *name,
eth_dev->dev_ops = &ops;
data->kdrv = RTE_KDRV_NONE;
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;
@@ -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;
@@ -387,7 +387,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;
@@ -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 */
@@ -1876,7 +1876,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;
@@ -1444,7 +1444,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;
@@ -1923,11 +1923,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",
@@ -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);
@@ -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
@@ -1621,11 +1621,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 */
@@ -2250,8 +2245,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.