From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 626D3A04B1; Mon, 5 Oct 2020 19:08:50 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E67051B669; Mon, 5 Oct 2020 19:08:38 +0200 (CEST) Received: from new1-smtp.messagingengine.com (new1-smtp.messagingengine.com [66.111.4.221]) by dpdk.org (Postfix) with ESMTP id 77D6E1B667 for ; Mon, 5 Oct 2020 19:08:36 +0200 (CEST) Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailnew.nyi.internal (Postfix) with ESMTP id EDDF758046F; Mon, 5 Oct 2020 13:08:35 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Mon, 05 Oct 2020 13:08:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=WhX1s5MsnnJeu 7ElRjJIxRTchbwmN64YKVW2dVLlGJg=; b=uNNrFHi9O25KCoGk5RkqUKuVyTFUb S8Xsd7o66kmyLvW1qFJM9CwP1IgbhpojyrEhzcMP3F78MhD/Ae4rX0nRsLABTqWW s2tjvy9+lZZqgvTMoKOA0fPfkPyDeiFJpo/hrsri6r6HCZV+UXQC+soTevngkBqn kaQbEvLPDVJYmQKqBmZW2MSAW6rtp/26J8WR0uXQnt2VMHpEkS8ZH8BM+uKGSDFv Hw8rC7/GMESwiibSn/nd2Ke+49SQB1TvhSHDbR8vVud/NND7tBIkAG8pQ0v3P3T8 ErJyxXPn0IEILcREiQRnxq2hvNCOr0dBZeiChc/lrG5CasVtpRJNZX4sQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm1; bh=WhX1s5MsnnJeu7ElRjJIxRTchbwmN64YKVW2dVLlGJg=; b=USknFd3s mvm2NjjMJN0b5LTyWL8wTvDxhdvfgTmcBr4JsolGMpl2qc4O0dByZm9stYbZQGgn uPHBnnzhIfov9SFdF4gq2q033twP7uyWA7ByHYa+CDl9P0NdhCOePBWdisAZwvwI YcEF7XMvnoEFTxsTD1/xwJhyKJvf/U3TWLW+dXo0NeYxG9RzN3ax/c1W5rvybsPz Ldgqghdu6HNl0pvEteRU2UEeh2b83vkyMvMTjz7Sl9eGAZ859+A4BL+Bjx7jJ63L g2LyRJ8xleaMspD0rEX/Nq+jf7dh92tCieF4FlKYkodBm9pAzBTEKj8n/+qYgqtn 4GuYFTc1DWFRRQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrgedvgdduudduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepvdehgfeivdejgedtveehfefhteelfefgieevgfffveefjeegtdfg uedthedtgeevnecukfhppeejjedrudefgedrvddtfedrudekgeenucevlhhushhtvghruf hiiigvpedunecurfgrrhgrmhepmhgrihhlfhhrohhmpehthhhomhgrshesmhhonhhjrghl ohhnrdhnvght X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 0C5CE328005A; Mon, 5 Oct 2020 13:08:29 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ferruh.yigit@intel.com, arybchenko@solarflare.com, Stephen Hemminger , Shepard Siegel , Ed Czeck , John Miller , Igor Russkikh , Pavel Belous , Hemant Agrawal , Sachin Saxena , Jeff Guo , Haiyue Wang , Marcin Wojtas , Michal Krawczyk , Guy Tzalik , Evgeny Schemeilin , Igor Chauskin , Gagandeep Singh , Qi Zhang , Xiao Wang , Ziyang Xuan , Xiaoyun Wang , Guoyang Zhou , "Wei Hu (Xavier)" , "Min Hu (Connor)" , Yisen Zhuang , Beilei Xing , Jingjing Wu , Qiming Yang , Shijith Thotton , Srisivasubramanian Srinivasan , Zyta Szpak , Liron Himi , Stephen Hemminger , "K. Y. Srinivasan" , Haiyang Zhang , Long Li , Martin Spinler , Akhil Goyal , Rasesh Mody , Shahed Shaikh , Bruce Richardson , Jerin Jacob , Maciej Czekaj , Maxime Coquelin , Chenbo Xia , Zhihong Wang , Yong Wang Date: Mon, 5 Oct 2020 19:08:17 +0200 Message-Id: <20201005170820.1018715-2-thomas@monjalon.net> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201005170820.1018715-1-thomas@monjalon.net> References: <20200913220711.3768597-1-thomas@monjalon.net> <20201005170820.1018715-1-thomas@monjalon.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v4 1/3] ethdev: remove forcing stopped state upon close X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" When closing a port, it is supposed to be already stopped, and marked as such with "dev_started" state zeroed by the stop API. Resetting "dev_started" before calling the driver close operation was hiding the case of not properly stopped port being closed. The flag "dev_started" is not changed anymore in "rte_eth_dev_close()". In case the "dev_stop" function is called from "dev_close", bypassing "rte_eth_dev_stop()" API, the "dev_started" state must be explicitly reset in the PMD in order to keep the same behaviour. Signed-off-by: Thomas Monjalon Acked-by: Stephen Hemminger Reviewed-by: Andrew Rybchenko --- drivers/net/ark/ark_ethdev.c | 1 + drivers/net/atlantic/atl_ethdev.c | 1 + drivers/net/dpaa/dpaa_ethdev.c | 1 + drivers/net/e1000/em_ethdev.c | 2 ++ drivers/net/e1000/igb_ethdev.c | 1 + drivers/net/ena/ena_ethdev.c | 1 + drivers/net/enetc/enetc_ethdev.c | 1 + drivers/net/fm10k/fm10k_ethdev.c | 1 + drivers/net/hinic/hinic_pmd_ethdev.c | 2 ++ drivers/net/hns3/hns3_ethdev.c | 1 + drivers/net/hns3/hns3_ethdev_vf.c | 1 + drivers/net/i40e/i40e_ethdev.c | 1 + drivers/net/i40e/i40e_ethdev_vf.c | 2 +- drivers/net/iavf/iavf_ethdev.c | 1 + drivers/net/ice/ice_ethdev.c | 1 + drivers/net/igc/igc_ethdev.c | 1 + drivers/net/ixgbe/ixgbe_ethdev.c | 1 + drivers/net/kni/rte_eth_kni.c | 1 + drivers/net/liquidio/lio_ethdev.c | 1 + drivers/net/mvneta/mvneta_ethdev.c | 2 ++ drivers/net/netvsc/hn_ethdev.c | 1 + drivers/net/nfb/nfb_ethdev.c | 2 ++ drivers/net/pfe/pfe_ethdev.c | 2 ++ drivers/net/qede/qede_ethdev.c | 1 + drivers/net/ring/rte_eth_ring.c | 1 + drivers/net/szedata2/rte_eth_szedata2.c | 2 ++ drivers/net/thunderx/nicvf_ethdev.c | 1 + drivers/net/vhost/rte_eth_vhost.c | 1 + drivers/net/virtio/virtio_ethdev.c | 1 + drivers/net/vmxnet3/vmxnet3_ethdev.c | 1 + lib/librte_ethdev/rte_ethdev.c | 1 - 31 files changed, 36 insertions(+), 2 deletions(-) diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index e3b1347769..f1355581f1 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -595,6 +595,7 @@ eth_ark_dev_stop(struct rte_eth_dev *dev) if (ark->started == 0) return; ark->started = 0; + dev->data->dev_started = 0; /* Stop the extension first */ if (ark->user_ext.dev_stop) diff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c index 2217511ca0..f2e48e1c11 100644 --- a/drivers/net/atlantic/atl_ethdev.c +++ b/drivers/net/atlantic/atl_ethdev.c @@ -609,6 +609,7 @@ atl_dev_stop(struct rte_eth_dev *dev) struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; PMD_INIT_FUNC_TRACE(); + dev->data->dev_started = 0; /* disable interrupts */ atl_disable_intr(hw); diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c index a01c8f3fc6..0ac9ef9fa1 100644 --- a/drivers/net/dpaa/dpaa_ethdev.c +++ b/drivers/net/dpaa/dpaa_ethdev.c @@ -363,6 +363,7 @@ static void dpaa_eth_dev_stop(struct rte_eth_dev *dev) struct fman_if *fif = dev->process_private; PMD_INIT_FUNC_TRACE(); + dev->data->dev_started = 0; if (!fif->is_shared_mac) fman_if_disable_rx(fif); diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c index d050eb478a..dd9238a616 100644 --- a/drivers/net/e1000/em_ethdev.c +++ b/drivers/net/e1000/em_ethdev.c @@ -717,6 +717,8 @@ eth_em_stop(struct rte_eth_dev *dev) struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; + dev->data->dev_started = 0; + eth_em_rxtx_control(dev, false); em_rxq_intr_disable(hw); em_lsc_intr_disable(hw); diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c index cb3d97e2a3..76746c9484 100644 --- a/drivers/net/e1000/igb_ethdev.c +++ b/drivers/net/e1000/igb_ethdev.c @@ -1497,6 +1497,7 @@ eth_igb_stop(struct rte_eth_dev *dev) } adapter->stopped = true; + dev->data->dev_started = 0; } static int diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index d32fa43837..e02d340c33 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -1118,6 +1118,7 @@ static void ena_stop(struct rte_eth_dev *dev) ++adapter->dev_stats.dev_stop; adapter->state = ENA_ADAPTER_STATE_STOPPED; + dev->data->dev_started = 0; } static int ena_create_io_queue(struct ena_ring *ring) diff --git a/drivers/net/enetc/enetc_ethdev.c b/drivers/net/enetc/enetc_ethdev.c index b3dec7e64d..dddbc89939 100644 --- a/drivers/net/enetc/enetc_ethdev.c +++ b/drivers/net/enetc/enetc_ethdev.c @@ -54,6 +54,7 @@ enetc_dev_stop(struct rte_eth_dev *dev) uint32_t val; PMD_INIT_FUNC_TRACE(); + dev->data->dev_started = 0; /* Disable port */ val = enetc_port_rd(enetc_hw, ENETC_PMR); enetc_port_wr(enetc_hw, ENETC_PMR, val & (~ENETC_PMR_EN)); diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c index 3096370718..51b36a1d7b 100644 --- a/drivers/net/fm10k/fm10k_ethdev.c +++ b/drivers/net/fm10k/fm10k_ethdev.c @@ -1161,6 +1161,7 @@ fm10k_dev_stop(struct rte_eth_dev *dev) int i; PMD_INIT_FUNC_TRACE(); + dev->data->dev_started = 0; if (dev->data->tx_queues) for (i = 0; i < dev->data->nb_tx_queues; i++) diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c index 466c8362b9..daf8f33cf3 100644 --- a/drivers/net/hinic/hinic_pmd_ethdev.c +++ b/drivers/net/hinic/hinic_pmd_ethdev.c @@ -1189,6 +1189,8 @@ static void hinic_dev_stop(struct rte_eth_dev *dev) name = dev->data->name; port_id = dev->data->port_id; + dev->data->dev_started = 0; + if (!rte_bit_relaxed_test_and_clear32(HINIC_DEV_START, &nic_dev->dev_status)) { PMD_DRV_LOG(INFO, "Device %s already stopped", name); diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c index c247583beb..a607824162 100644 --- a/drivers/net/hns3/hns3_ethdev.c +++ b/drivers/net/hns3/hns3_ethdev.c @@ -4855,6 +4855,7 @@ hns3_dev_stop(struct rte_eth_dev *dev) struct hns3_hw *hw = &hns->hw; PMD_INIT_FUNC_TRACE(); + dev->data->dev_started = 0; hw->adapter_state = HNS3_NIC_STOPPING; hns3_set_rxtx_function(dev); diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c index fec609c845..173983a91f 100644 --- a/drivers/net/hns3/hns3_ethdev_vf.c +++ b/drivers/net/hns3/hns3_ethdev_vf.c @@ -1892,6 +1892,7 @@ hns3vf_dev_stop(struct rte_eth_dev *dev) struct hns3_hw *hw = &hns->hw; PMD_INIT_FUNC_TRACE(); + dev->data->dev_started = 0; hw->adapter_state = HNS3_NIC_STOPPING; hns3_set_rxtx_function(dev); diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 943cfe71dc..825de51fbb 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -2599,6 +2599,7 @@ i40e_dev_stop(struct rte_eth_dev *dev) pf->tm_conf.committed = false; hw->adapter_stopped = 1; + dev->data->dev_started = 0; pf->adapter->rss_reta_updated = 0; } diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 4d6510d1ff..40c9745433 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -2207,7 +2207,7 @@ i40evf_dev_stop(struct rte_eth_dev *dev) i40evf_add_del_mc_addr_list(dev, vf->mc_addrs, vf->mc_addrs_num, FALSE); hw->adapter_stopped = 1; - + dev->data->dev_started = 0; } static int diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index a5b1433306..90949521b1 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -529,6 +529,7 @@ iavf_dev_stop(struct rte_eth_dev *dev) false); adapter->stopped = 1; + dev->data->dev_started = 0; } static int diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index d8ce09d28f..1db4015c23 100644 --- a/drivers/net/ice/ice_ethdev.c +++ b/drivers/net/ice/ice_ethdev.c @@ -2376,6 +2376,7 @@ ice_dev_stop(struct rte_eth_dev *dev) } pf->adapter_stopped = true; + dev->data->dev_started = 0; } static int diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c index 7f5066df4b..73b7d20ac2 100644 --- a/drivers/net/igc/igc_ethdev.c +++ b/drivers/net/igc/igc_ethdev.c @@ -616,6 +616,7 @@ eth_igc_stop(struct rte_eth_dev *dev) struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; struct rte_eth_link link; + dev->data->dev_started = 0; adapter->stopped = 1; /* disable receive and transmit */ diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 0b98e210e7..bd83b0e31a 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -2917,6 +2917,7 @@ ixgbe_dev_stop(struct rte_eth_dev *dev) adapter->rss_reta_updated = 0; hw->adapter_stopped = true; + dev->data->dev_started = 0; } /* diff --git a/drivers/net/kni/rte_eth_kni.c b/drivers/net/kni/rte_eth_kni.c index be747adf86..329a55039f 100644 --- a/drivers/net/kni/rte_eth_kni.c +++ b/drivers/net/kni/rte_eth_kni.c @@ -196,6 +196,7 @@ eth_kni_dev_stop(struct rte_eth_dev *dev) } dev->data->dev_link.link_status = 0; + dev->data->dev_started = 0; } static int diff --git a/drivers/net/liquidio/lio_ethdev.c b/drivers/net/liquidio/lio_ethdev.c index 1a41f27198..52bcefc819 100644 --- a/drivers/net/liquidio/lio_ethdev.c +++ b/drivers/net/liquidio/lio_ethdev.c @@ -1471,6 +1471,7 @@ lio_dev_stop(struct rte_eth_dev *eth_dev) struct lio_device *lio_dev = LIO_DEV(eth_dev); lio_dev_info(lio_dev, "Stopping port %d\n", eth_dev->data->port_id); + eth_dev->data->dev_started = 0; lio_dev->intf_open = 0; rte_mb(); diff --git a/drivers/net/mvneta/mvneta_ethdev.c b/drivers/net/mvneta/mvneta_ethdev.c index 607771149a..3c0332ab4d 100644 --- a/drivers/net/mvneta/mvneta_ethdev.c +++ b/drivers/net/mvneta/mvneta_ethdev.c @@ -413,6 +413,8 @@ mvneta_dev_stop(struct rte_eth_dev *dev) { struct mvneta_priv *priv = dev->data->dev_private; + dev->data->dev_started = 0; + if (!priv->ppio) return; diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c index 5ae2d469c8..be3713dfa0 100644 --- a/drivers/net/netvsc/hn_ethdev.c +++ b/drivers/net/netvsc/hn_ethdev.c @@ -833,6 +833,7 @@ hn_dev_stop(struct rte_eth_dev *dev) struct hn_data *hv = dev->data->dev_private; PMD_INIT_FUNC_TRACE(); + dev->data->dev_started = 0; hn_rndis_set_rxfilter(hv, 0); hn_vf_stop(dev); diff --git a/drivers/net/nfb/nfb_ethdev.c b/drivers/net/nfb/nfb_ethdev.c index a9a8bc878d..44e57ee6c8 100644 --- a/drivers/net/nfb/nfb_ethdev.c +++ b/drivers/net/nfb/nfb_ethdev.c @@ -158,6 +158,8 @@ nfb_eth_dev_stop(struct rte_eth_dev *dev) uint16_t nb_rx = dev->data->nb_rx_queues; uint16_t nb_tx = dev->data->nb_tx_queues; + dev->data->dev_started = 0; + for (i = 0; i < nb_tx; i++) nfb_eth_tx_queue_stop(dev, i); diff --git a/drivers/net/pfe/pfe_ethdev.c b/drivers/net/pfe/pfe_ethdev.c index f0de1c8a2e..c4dd0a5f69 100644 --- a/drivers/net/pfe/pfe_ethdev.c +++ b/drivers/net/pfe/pfe_ethdev.c @@ -378,6 +378,8 @@ pfe_eth_stop(struct rte_eth_dev *dev/*, int wake*/) { struct pfe_eth_priv_s *priv = dev->data->dev_private; + dev->data->dev_started = 0; + gemac_disable(priv->EMAC_baseaddr); gpi_disable(priv->GPI_baseaddr); diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index 548497f3ae..88389c9e4f 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -1169,6 +1169,7 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev) struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); PMD_INIT_FUNC_TRACE(edev); + eth_dev->data->dev_started = 0; /* Bring the link down */ qede_dev_set_link_state(eth_dev, false); diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c index 83c5502123..6dceab0c59 100644 --- a/drivers/net/ring/rte_eth_ring.c +++ b/drivers/net/ring/rte_eth_ring.c @@ -108,6 +108,7 @@ eth_dev_start(struct rte_eth_dev *dev) static void eth_dev_stop(struct rte_eth_dev *dev) { + dev->data->dev_started = 0; dev->data->dev_link.link_status = ETH_LINK_DOWN; } diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c index 0eecec1e8c..c89ff16fc1 100644 --- a/drivers/net/szedata2/rte_eth_szedata2.c +++ b/drivers/net/szedata2/rte_eth_szedata2.c @@ -1020,6 +1020,8 @@ eth_dev_stop(struct rte_eth_dev *dev) uint16_t nb_rx = dev->data->nb_rx_queues; uint16_t nb_tx = dev->data->nb_tx_queues; + dev->data->dev_started = 0; + for (i = 0; i < nb_tx; i++) eth_tx_queue_stop(dev, i); diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c index cc6eb4ba24..b87e1e5640 100644 --- a/drivers/net/thunderx/nicvf_ethdev.c +++ b/drivers/net/thunderx/nicvf_ethdev.c @@ -1766,6 +1766,7 @@ nicvf_dev_stop_cleanup(struct rte_eth_dev *dev, bool cleanup) struct nicvf *nic = nicvf_pmd_priv(dev); PMD_INIT_FUNC_TRACE(); + dev->data->dev_started = 0; /* Teardown secondary vf first */ for (i = 0; i < nic->sqs_count; i++) { diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index 66efecb320..5328cfcd02 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -1158,6 +1158,7 @@ eth_dev_stop(struct rte_eth_dev *dev) { struct pmd_internal *internal = dev->data->dev_private; + dev->data->dev_started = 0; rte_atomic32_set(&internal->started, 0); update_queuing_status(dev); } diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index 0236c756dc..ea6496acce 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -2523,6 +2523,7 @@ virtio_dev_stop(struct rte_eth_dev *dev) struct rte_intr_conf *intr_conf = &dev->data->dev_conf.intr_conf; PMD_INIT_LOG(DEBUG, "stop"); + dev->data->dev_started = 0; rte_spinlock_lock(&hw->state_lock); if (!hw->started) diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c index fa950e1ba0..828043a65a 100644 --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c @@ -858,6 +858,7 @@ vmxnet3_dev_stop(struct rte_eth_dev *dev) rte_eth_linkstatus_set(dev, &link); hw->adapter_stopped = 1; + dev->data->dev_started = 0; } static void diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index d7668114ca..0b8e8e3e8d 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -1716,7 +1716,6 @@ rte_eth_dev_close(uint16_t port_id) dev = &rte_eth_devices[port_id]; RTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_close); - dev->data->dev_started = 0; (*dev->dev_ops->dev_close)(dev); rte_ethdev_trace_close(port_id); -- 2.28.0