]> git.droids-corp.org - dpdk.git/commitdiff
ethdev: reset all when releasing a port
authorThomas Monjalon <thomas@monjalon.net>
Fri, 16 Oct 2020 13:32:58 +0000 (15:32 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 16 Oct 2020 20:26:41 +0000 (22:26 +0200)
The function rte_eth_dev_release_port() is partially resetting
the struct rte_eth_dev. The drivers were completing this reset
with more pointers set to NULL in the close or remove operations.

More pointers are reset at ethdev level,
and some redundant assignments are removed from PMDs.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Reviewed-by: Haiyue Wang <haiyue.wang@intel.com>
Acked-by: Jeff Guo <jia.guo@intel.com>
Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
31 files changed:
drivers/net/ark/ark_ethdev.c
drivers/net/atlantic/atl_ethdev.c
drivers/net/axgbe/axgbe_ethdev.c
drivers/net/bnxt/bnxt_ethdev.c
drivers/net/bnxt/bnxt_reps.c
drivers/net/bonding/rte_eth_bond_pmd.c
drivers/net/dpaa/dpaa_ethdev.c
drivers/net/dpaa2/dpaa2_ethdev.c
drivers/net/e1000/em_ethdev.c
drivers/net/e1000/igb_ethdev.c
drivers/net/ena/ena_ethdev.c
drivers/net/fm10k/fm10k_ethdev.c
drivers/net/hinic/hinic_pmd_ethdev.c
drivers/net/hns3/hns3_ethdev.c
drivers/net/hns3/hns3_ethdev_vf.c
drivers/net/i40e/i40e_ethdev.c
drivers/net/i40e/i40e_ethdev_vf.c
drivers/net/iavf/iavf_ethdev.c
drivers/net/ice/ice_dcf_ethdev.c
drivers/net/ice/ice_ethdev.c
drivers/net/ionic/ionic_ethdev.c
drivers/net/ixgbe/ixgbe_ethdev.c
drivers/net/liquidio/lio_ethdev.c
drivers/net/netvsc/hn_ethdev.c
drivers/net/octeontx/octeontx_ethdev.c
drivers/net/qede/qede_ethdev.c
drivers/net/sfc/sfc_ethdev.c
drivers/net/tap/rte_eth_tap.c
drivers/net/virtio/virtio_ethdev.c
drivers/net/vmxnet3/vmxnet3_ethdev.c
lib/librte_ethdev/rte_ethdev.c

index f1355581f124433ce52e0a61e02a964b42b72618..dc14f0fb1a364b843dae7c1e6b47cc95f8ca0aca 100644 (file)
@@ -504,9 +504,6 @@ eth_ark_dev_uninit(struct rte_eth_dev *dev)
        ark_pktgen_uninit(ark->pg);
        ark_pktchkr_uninit(ark->pc);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
        return 0;
 }
 
index f2e48e1c1194433f515f0934bd35b66e3339e4cc..d96865d5b498f1c78d65b0a09528579330a37eba 100644 (file)
@@ -702,10 +702,6 @@ atl_dev_close(struct rte_eth_dev *dev)
 
        atl_free_queues(dev);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        /* disable uio intr before callback unregister */
        rte_intr_disable(intr_handle);
        rte_intr_callback_unregister(intr_handle,
index cf085487cca0c11810a22765f888cff4a2386eae..39087f36f04f3b00c2c8ac8d29b8f551d001d718 100644 (file)
@@ -2134,9 +2134,6 @@ axgbe_dev_close(struct rte_eth_dev *eth_dev)
                return 0;
 
        pci_dev = RTE_DEV_TO_PCI(eth_dev->device);
-       eth_dev->dev_ops = NULL;
-       eth_dev->rx_pkt_burst = NULL;
-       eth_dev->tx_pkt_burst = NULL;
        axgbe_dev_clear_queues(eth_dev);
 
        /* disable uio intr before callback unregister */
index 8dd4ec360369e6a0cabdc28e874ac3cf52848b71..64c67e737dd7c7fd3fcc4c6c0bb50ded6eaebd9e 100644 (file)
@@ -1433,10 +1433,6 @@ static int bnxt_dev_close_op(struct rte_eth_dev *eth_dev)
        bnxt_free_pf_info(bp);
        bnxt_free_parent_info(bp);
 
-       eth_dev->dev_ops = NULL;
-       eth_dev->rx_pkt_burst = NULL;
-       eth_dev->tx_pkt_burst = NULL;
-
        rte_memzone_free((const struct rte_memzone *)bp->tx_mem_zone);
        bp->tx_mem_zone = NULL;
        rte_memzone_free((const struct rte_memzone *)bp->rx_mem_zone);
index 74a76fce5712b4b47682cd2f7c28a454750b3857..012ccc73feb95a1689e63621f32e2a750ffdbec6 100644 (file)
@@ -255,7 +255,6 @@ int bnxt_representor_uninit(struct rte_eth_dev *eth_dev)
 
        PMD_DRV_LOG(DEBUG, "BNXT Port:%d VFR uninit\n", eth_dev->data->port_id);
        eth_dev->data->mac_addrs = NULL;
-       eth_dev->dev_ops = NULL;
 
        parent_bp = rep->parent_dev->data->dev_private;
        if (!parent_bp) {
index 1c404b2edd6eec57586509db9bbf37172e52c660..99910e9488fa9620b13a23fe80530eacc8e9cda5 100644 (file)
@@ -2130,10 +2130,6 @@ bond_ethdev_close(struct rte_eth_dev *dev)
         */
        rte_mempool_free(internals->mode6.mempool);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        return 0;
 }
 
index 952e8f72adb5464169eaf93678a0209f5a606671..6d27d742afa824b01b27d1065b5d1f0e7ce67d04 100644 (file)
@@ -504,10 +504,6 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev)
        rte_free(dpaa_intf->tx_queues);
        dpaa_intf->tx_queues = NULL;
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        return 0;
 }
 
index d8624514df67713fef15a01686b7ab6ee972d35e..ba99a524f93e242b04ca5aabf1bf5df463a52875 100644 (file)
@@ -1284,10 +1284,6 @@ dpaa2_dev_close(struct rte_eth_dev *dev)
        if (priv->extract.qos_extract_param)
                rte_free((void *)(size_t)priv->extract.qos_extract_param);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        DPAA2_PMD_INFO("%s: netdev deleted", dev->data->name);
        return 0;
 }
index dd9238a616918309861644218da309b2e1ecf998..304c040421fc417241bc861dbe2471d11b70ea7e 100644 (file)
@@ -774,10 +774,6 @@ eth_em_close(struct rte_eth_dev *dev)
        em_release_manageability(hw);
        em_hw_control_release(hw);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        /* disable uio intr before callback unregister */
        rte_intr_disable(intr_handle);
        rte_intr_callback_unregister(intr_handle,
index f697b0e52ec07e922f74f35879891e8816d5c224..9a3f9cb6692a5a946dffd070708c29807595152f 100644 (file)
@@ -1565,10 +1565,6 @@ eth_igb_close(struct rte_eth_dev *dev)
        memset(&link, 0, sizeof(link));
        rte_eth_linkstatus_set(dev, &link);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        /* Reset any pending lock */
        igb_reset_swfw_lock(hw);
 
@@ -3405,10 +3401,6 @@ igbvf_dev_close(struct rte_eth_dev *dev)
        memset(&addr, 0, sizeof(addr));
        igbvf_default_mac_addr_set(dev, &addr);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        rte_intr_callback_unregister(&pci_dev->intr_handle,
                                     eth_igbvf_interrupt_handler,
                                     (void *)dev);
index e02d340c33e413b7044d2605871d0ce2545b6b53..bdb8fe79c6a046bcde7ac1636d88ec01c503c1af 100644 (file)
@@ -1956,11 +1956,6 @@ static int eth_ena_dev_uninit(struct rte_eth_dev *eth_dev)
 
        ena_destroy_device(eth_dev);
 
-       eth_dev->dev_ops = NULL;
-       eth_dev->rx_pkt_burst = NULL;
-       eth_dev->tx_pkt_burst = NULL;
-       eth_dev->tx_pkt_prepare = NULL;
-
        return 0;
 }
 
index 0c13fd5c37f9e7d75d1c9f213bddc74f65369430..bada69c64ae06db70e1c531a4403b00875a60d36 100644 (file)
@@ -2805,10 +2805,6 @@ fm10k_dev_close(struct rte_eth_dev *dev)
        fm10k_dev_queue_release(dev);
        fm10k_stop_hw(hw);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        /* disable uio/vfio intr */
        rte_intr_disable(intr_handle);
 
index daf8f33cf37d7404537cb5e18513e0347c879c70..2504228d948e4c0e9e3fa7ac120056514524cee5 100644 (file)
@@ -3253,10 +3253,6 @@ static int hinic_dev_uninit(struct rte_eth_dev *dev)
 
        hinic_dev_close(dev);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        rte_free(nic_dev->mc_list);
 
        return HINIC_OK;
index 8fcc0f18c5260461250154a6f4d8e85eede2106e..c850e5eb14812d9dad666dfe93aedcbe260391b3 100644 (file)
@@ -6201,10 +6201,6 @@ hns3_dev_uninit(struct rte_eth_dev *eth_dev)
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
                return -EPERM;
 
-       eth_dev->dev_ops = NULL;
-       eth_dev->rx_pkt_burst = NULL;
-       eth_dev->tx_pkt_burst = NULL;
-       eth_dev->tx_pkt_prepare = NULL;
        if (hw->adapter_state < HNS3_NIC_CLOSING)
                hns3_dev_close(eth_dev);
 
index b2038395a206721255a737b85e468d17a25b0d6d..6e169583a0cb3cb39cab69d82c7e3276a197bd15 100644 (file)
@@ -2847,11 +2847,6 @@ hns3vf_dev_uninit(struct rte_eth_dev *eth_dev)
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
                return -EPERM;
 
-       eth_dev->dev_ops = NULL;
-       eth_dev->rx_pkt_burst = NULL;
-       eth_dev->tx_pkt_burst = NULL;
-       eth_dev->tx_pkt_prepare = NULL;
-
        if (hw->adapter_state < HNS3_NIC_CLOSING)
                hns3vf_dev_close(eth_dev);
 
index 825de51fbb8f165ed6ed0e7a98b8f249345bfd2b..605a1792b6779bdb23ee750bddbf2d9430ff4a4b 100644 (file)
@@ -2693,10 +2693,6 @@ i40e_dev_close(struct rte_eth_dev *dev)
                        (reg | I40E_PFGEN_CTRL_PFSWR_MASK));
        I40E_WRITE_FLUSH(hw);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        /* Clear PXE mode */
        i40e_clear_pxe_mode(hw);
 
index 40c9745433f489ba5f32113738eb340f9d340e48..3dcd50c428a3e72bfa466cf0ed9b17e8bd4e5292 100644 (file)
@@ -2421,10 +2421,6 @@ i40evf_dev_close(struct rte_eth_dev *dev)
        i40e_shutdown_adminq(hw);
        i40evf_disable_irq0(hw);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        rte_free(vf->vf_res);
        vf->vf_res = NULL;
        rte_free(vf->aq_resp);
index 8bd2c048a1e0f892f57d70a4ad319feb61b20f42..c951e7535886b9fb7ddc136b76198b60954e37a8 100644 (file)
@@ -1525,10 +1525,6 @@ iavf_dev_close(struct rte_eth_dev *dev)
                                     iavf_dev_interrupt_handler, dev);
        iavf_disable_irq0(hw);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF) {
                if (vf->rss_lut) {
                        rte_free(vf->rss_lut);
index 33dd0c44f2002bc303f5555fa91e662a9ad7024b..f2056e2aba8da15d56e89728dbebc537caeab158 100644 (file)
@@ -855,10 +855,6 @@ ice_dcf_dev_close(struct rte_eth_dev *dev)
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
                return 0;
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        ice_dcf_uninit_parent_adapter(dev);
        ice_dcf_uninit_hw(dev, &adapter->real_hw);
 
index 468a6d793b499c0a236c458d44f345df1cf46956..d80c0a94b5ea737b5fc7f2fdaa97450d668390d7 100644 (file)
@@ -2410,10 +2410,6 @@ ice_dev_close(struct rte_eth_dev *dev)
        rte_free(pf->proto_xtr);
        pf->proto_xtr = NULL;
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        /* disable uio intr before callback unregister */
        rte_intr_disable(intr_handle);
 
index ef7d06e526bf1b387945a4a7377044c0488095d0..1387253dc81db6b5c9f35048f391ebc6c4193154 100644 (file)
@@ -1065,11 +1065,6 @@ eth_ionic_dev_uninit(struct rte_eth_dev *eth_dev)
        ionic_lif_deinit(lif);
        ionic_lif_free(lif);
 
-       eth_dev->dev_ops = NULL;
-       eth_dev->rx_pkt_burst = NULL;
-       eth_dev->tx_pkt_burst = NULL;
-       eth_dev->tx_pkt_prepare = NULL;
-
        return 0;
 }
 
index a45c59644b701e15bdec17cb2052cbf63f69ac11..841c6877b242aef20ffec11022a7142538ad99b2 100644 (file)
@@ -3010,10 +3010,6 @@ ixgbe_dev_close(struct rte_eth_dev *dev)
        /* reprogram the RAR[0] in case user changed it. */
        ixgbe_set_rar(hw, 0, hw->mac.addr, 0, IXGBE_RAH_AV);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        /* Unlock any pending hardware semaphore */
        ixgbe_swfw_lock_reset(hw);
 
@@ -5468,10 +5464,6 @@ ixgbevf_dev_close(struct rte_eth_dev *dev)
         **/
        ixgbevf_remove_mac_addr(dev, 0);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
-
        rte_intr_disable(intr_handle);
        rte_intr_callback_unregister(intr_handle,
                                     ixgbevf_dev_interrupt_handler, dev);
index 52bcefc8195c1539c275f66b1695a1664f2291f6..1b01502e495aa3e8e449c77bcebe42cfed85097e 100644 (file)
@@ -2068,10 +2068,6 @@ lio_eth_dev_uninit(struct rte_eth_dev *eth_dev)
        /* lio_free_sc_buffer_pool */
        lio_free_sc_buffer_pool(lio_dev);
 
-       eth_dev->dev_ops = NULL;
-       eth_dev->rx_pkt_burst = NULL;
-       eth_dev->tx_pkt_burst = NULL;
-
        return 0;
 }
 
index be3713dfa045bedafa38180e2fd29a1a7cebb764..8743e6e69ab4f6d7183cafafefb023c0bfef7ea3 100644 (file)
@@ -1050,10 +1050,6 @@ eth_hn_dev_uninit(struct rte_eth_dev *eth_dev)
        hn_dev_stop(eth_dev);
        hn_dev_close(eth_dev);
 
-       eth_dev->dev_ops = NULL;
-       eth_dev->tx_pkt_burst = NULL;
-       eth_dev->rx_pkt_burst = NULL;
-
        hn_detach(hv);
        hn_chim_uninit(eth_dev);
        rte_vmbus_chan_close(hv->primary->chan);
index aa9ef3bb70085fb8e358c16c887a90ded63ded3c..0ea6de448ac18d1d16fe8bccd23aea64814c2e1f 100644 (file)
@@ -513,9 +513,6 @@ octeontx_dev_close(struct rte_eth_dev *dev)
 
        octeontx_port_close(nic);
 
-       dev->tx_pkt_burst = NULL;
-       dev->rx_pkt_burst = NULL;
-
        return 0;
 }
 
index 88389c9e4fce30d254c421f1df55f39db802383a..0dd2f788209e769f68d4032534eb3374cb790b97 100644 (file)
@@ -1594,10 +1594,6 @@ static int qede_dev_close(struct rte_eth_dev *eth_dev)
        if (ECORE_IS_CMT(edev))
                rte_eal_alarm_cancel(qede_poll_sp_sb_cb, (void *)eth_dev);
 
-       eth_dev->dev_ops = NULL;
-       eth_dev->rx_pkt_burst = NULL;
-       eth_dev->tx_pkt_burst = NULL;
-
        return 0;
 }
 
index 165776b6520be1bee97e4da6cdd14152889cd3ec..46042b239af72bc5f1a81ab8c3c474779ec727b9 100644 (file)
@@ -324,11 +324,7 @@ static void
 sfc_eth_dev_secondary_clear_ops(struct rte_eth_dev *dev)
 {
        free(dev->process_private);
-       dev->process_private = NULL;
-       dev->dev_ops = NULL;
-       dev->tx_pkt_prepare = NULL;
-       dev->tx_pkt_burst = NULL;
-       dev->rx_pkt_burst = NULL;
+       rte_eth_dev_release_port(dev);
 }
 
 static int
@@ -380,7 +376,6 @@ sfc_dev_close(struct rte_eth_dev *dev)
        /* Required for logging, so cleanup last */
        sa->eth_dev = NULL;
 
-       dev->process_private = NULL;
        free(sa);
 
        return 0;
index e592a469b32e214e86bf019b5a37d774376c38f3..6f2aa6267383ea22a10cea08fc89e48a09cdd65c 100644 (file)
@@ -1133,7 +1133,6 @@ tap_dev_close(struct rte_eth_dev *dev)
                internals->ioctl_sock = -1;
        }
        rte_free(dev->process_private);
-       dev->process_private = NULL;
        if (tap_devices_count == 1)
                rte_mp_action_unregister(TAP_MP_KEY);
        tap_devices_count--;
index aa8de55fe9b267ee5827287917ef6f87d490c81d..e492e822c406e4e751a786c2aa0c4018ca07a03f 100644 (file)
@@ -2001,10 +2001,6 @@ eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev)
        virtio_dev_stop(eth_dev);
        virtio_dev_close(eth_dev);
 
-       eth_dev->dev_ops = NULL;
-       eth_dev->tx_pkt_burst = NULL;
-       eth_dev->rx_pkt_burst = NULL;
-
        PMD_INIT_LOG(DEBUG, "dev_uninit completed");
 
        return 0;
index 828043a65a9ffdabcefe43b61161048f6dcda984..1d070fbd7985247e6acf3afa38e173ee72773953 100644 (file)
@@ -368,11 +368,6 @@ eth_vmxnet3_dev_uninit(struct rte_eth_dev *eth_dev)
                return -EBUSY;
        }
 
-       eth_dev->dev_ops = NULL;
-       eth_dev->rx_pkt_burst = NULL;
-       eth_dev->tx_pkt_burst = NULL;
-       eth_dev->tx_pkt_prepare = NULL;
-
        return 0;
 }
 
index fe63965fa51612f3a8ec5e95deed2dee0ea5fcb6..2b56dd76a65b46bde00372af8ad719531a9bab15 100644 (file)
@@ -561,7 +561,16 @@ rte_eth_dev_release_port(struct rte_eth_dev *eth_dev)
 
        eth_dev->state = RTE_ETH_DEV_UNUSED;
        eth_dev->device = NULL;
+       eth_dev->process_private = NULL;
        eth_dev->intr_handle = NULL;
+       eth_dev->rx_pkt_burst = NULL;
+       eth_dev->tx_pkt_burst = NULL;
+       eth_dev->tx_pkt_prepare = NULL;
+       eth_dev->rx_queue_count = NULL;
+       eth_dev->rx_descriptor_done = NULL;
+       eth_dev->rx_descriptor_status = NULL;
+       eth_dev->tx_descriptor_status = NULL;
+       eth_dev->dev_ops = NULL;
 
        if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
                rte_free(eth_dev->data->rx_queues);