ethdev: reset all when releasing a port

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>
This commit is contained in:
Thomas Monjalon 2020-10-16 15:32:58 +02:00 committed by Ferruh Yigit
parent b8f5d2ae75
commit 0607dadf98
31 changed files with 10 additions and 125 deletions

View 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;
}

View 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,

View 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 */

View 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);

View 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) {

View 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;
}

View 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;
}

View 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;
}

View 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,

View 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);

View 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;
}

View 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);

View 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;

View 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);

View 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);

View 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);

View 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);

View 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);

View 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);

View 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);

View 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;
}

View 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);

View 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;
}

View 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);

View 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;
}

View 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;
}

View 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;

View 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--;

View 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;

View 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;
}

View 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);