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 EFAFBA04C0; Tue, 29 Sep 2020 07:53:49 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C79C21BEB7; Tue, 29 Sep 2020 07:53:48 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 68E261BEAE for ; Tue, 29 Sep 2020 07:53:45 +0200 (CEST) IronPort-SDR: VALvpC1X1n1c9XydiUCQ0OMk4NyqHbbjnsnlGCV7ERYWr/cGelhJmKyCkDqdhZ5Vg/sflGIQQY 2/waGREexJlQ== X-IronPort-AV: E=McAfee;i="6000,8403,9758"; a="162999806" X-IronPort-AV: E=Sophos;i="5.77,317,1596524400"; d="scan'208";a="162999806" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Sep 2020 22:53:44 -0700 IronPort-SDR: ZjUlYQpSLJvgPSnwQYZqrfLCoBWBDUu+QW4MKMB1qpaJt6uYAibH8Q4gWBgoygex62W213ShA/ EET0rT0TsmVA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,317,1596524400"; d="scan'208";a="350093960" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by FMSMGA003.fm.intel.com with ESMTP; 28 Sep 2020 22:53:44 -0700 Received: from shsmsx605.ccr.corp.intel.com (10.109.6.215) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 28 Sep 2020 22:53:43 -0700 Received: from shsmsx601.ccr.corp.intel.com (10.109.6.141) by SHSMSX605.ccr.corp.intel.com (10.109.6.215) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 29 Sep 2020 13:53:41 +0800 Received: from shsmsx601.ccr.corp.intel.com ([10.109.6.141]) by SHSMSX601.ccr.corp.intel.com ([10.109.6.141]) with mapi id 15.01.1713.004; Tue, 29 Sep 2020 13:53:41 +0800 From: "Guo, Jia" To: Thomas Monjalon , "dev@dpdk.org" CC: "Yigit, Ferruh" , "arybchenko@solarflare.com" , "Xu, Rosen" , Sachin Saxena , Ajit Khaparde , Liron Himi , "Loftus, Ciara" , "Zhang, Qi Z" , Shepard Siegel , Ed Czeck , "John Miller" , Steven Webster , Matt Peters , Somnath Kotur , Rahul Lakkireddy , "Wang, Haiyue" , Marcin Wojtas , Michal Krawczyk , "Guy Tzalik" , Evgeny Schemeilin , "Igor Chauskin" , Gagandeep Singh , John Daley , Hyong Youb Kim , "Wang, Xiao W" , Ziyang Xuan , Xiaoyun Wang , Guoyang Zhou , "Xing, Beilei" , "Wu, Jingjing" , "Yang, Qiming" , Alfredo Cardigliano , Shijith Thotton , Srisivasubramanian Srinivasan , Matan Azrad , Shahaf Shuler , Zyta Szpak , Stephen Hemminger , "K. Y. Srinivasan" , Haiyang Zhang , Long Li , Martin Spinler , Heinrich Kuhn , Harman Kalra , Akhil Goyal , Jerin Jacob , Maciej Czekaj , Maxime Coquelin , "Xia, Chenbo" , "Wang, Zhihong" , Yong Wang , "Burakov, Anatoly" Thread-Topic: [PATCH v3 23/29] drivers/net: check process type in close operation Thread-Index: AQHWle1UEWJvRJVAFkWTOwYfDSMIrql/HdHw Date: Tue, 29 Sep 2020 05:53:41 +0000 Message-ID: <606ae7c6bd8a4869a64079c5dd0d8ab1@intel.com> References: <20200913220711.3768597-1-thomas@monjalon.net> <20200928231437.414489-1-thomas@monjalon.net> <20200928231437.414489-24-thomas@monjalon.net> In-Reply-To: <20200928231437.414489-24-thomas@monjalon.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 x-originating-ip: [10.239.127.36] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v3 23/29] drivers/net: check process type in close operation 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" For drivers/net/i40e, Acked-by: Jeff Guo > -----Original Message----- > From: Thomas Monjalon > Sent: Tuesday, September 29, 2020 7:15 AM > To: dev@dpdk.org > Cc: Yigit, Ferruh ; arybchenko@solarflare.com; Xu= , > Rosen ; Sachin Saxena ; > Ajit Khaparde ; Liron Himi > ; Loftus, Ciara ; Zhang, Qi Z > ; Shepard Siegel ; > Ed Czeck ; John Miller > ; Steven Webster > ; Matt Peters > ; Somnath Kotur > ; Rahul Lakkireddy > ; Guo, Jia ; Wang, > Haiyue ; Marcin Wojtas ; > Michal Krawczyk ; Guy Tzalik ; > Evgeny Schemeilin ; Igor Chauskin > ; Gagandeep Singh ; John Daley > ; Hyong Youb Kim ; Wang, Xiao > W ; Ziyang Xuan ; > Xiaoyun Wang ; Guoyang Zhou > ; Xing, Beilei ; Wu, > Jingjing ; Yang, Qiming ; > Alfredo Cardigliano ; Shijith Thotton > ; Srisivasubramanian Srinivasan > ; Matan Azrad ; Shahaf > Shuler ; Zyta Szpak ; Stephen > Hemminger ; K. Y. Srinivasan > ; Haiyang Zhang ; Long Li > ; Martin Spinler ; Heinrich Kuhn > ; Harman Kalra ; > Akhil Goyal ; Jerin Jacob ; > Maciej Czekaj ; Maxime Coquelin > ; Xia, Chenbo ; > Wang, Zhihong ; Yong Wang > ; Burakov, Anatoly > Subject: [PATCH v3 23/29] drivers/net: check process type in close operat= ion >=20 > The secondary processes are not allowed to release shared resources. > Only process-private resources should be freed in a secondary process. > Most of the time, there is no process-private resource, so the close > operation is just forbidden in a secondary process. >=20 > After adding proper check in the port close functions, some redundant > checks in the device remove functions are dropped. >=20 > Signed-off-by: Thomas Monjalon > Reviewed-by: Rosen Xu > Reviewed-by: Sachin Saxena > Reviewed-by: Ajit Khaparde > Reviewed-by: Liron Himi > --- > drivers/net/af_xdp/rte_eth_af_xdp.c | 3 +++ > drivers/net/ark/ark_ethdev.c | 3 +++ > drivers/net/avp/avp_ethdev.c | 3 +++ > drivers/net/bnxt/bnxt_ethdev.c | 3 +++ > drivers/net/bnxt/bnxt_reps.c | 3 +++ > drivers/net/cxgbe/cxgbe_ethdev.c | 3 +++ > drivers/net/e1000/em_ethdev.c | 3 +++ > drivers/net/e1000/igb_ethdev.c | 6 +++++ > drivers/net/ena/ena_ethdev.c | 3 +++ > drivers/net/enetc/enetc_ethdev.c | 3 +++ > drivers/net/enic/enic_ethdev.c | 3 +++ > drivers/net/fm10k/fm10k_ethdev.c | 9 ++----- > drivers/net/hinic/hinic_pmd_ethdev.c | 3 +++ > drivers/net/i40e/i40e_ethdev.c | 2 ++ > drivers/net/i40e/i40e_ethdev_vf.c | 3 +++ > drivers/net/iavf/iavf_ethdev.c | 3 +++ > drivers/net/ice/ice_ethdev.c | 3 +++ > drivers/net/igc/igc_ethdev.c | 6 ++--- > drivers/net/ionic/ionic_ethdev.c | 2 ++ > drivers/net/ipn3ke/ipn3ke_representor.c | 3 +++ > drivers/net/ixgbe/ixgbe_ethdev.c | 4 ++++ > drivers/net/kni/rte_eth_kni.c | 3 +++ > drivers/net/liquidio/lio_ethdev.c | 3 +++ > drivers/net/mlx4/mlx4.c | 2 ++ > drivers/net/mvneta/mvneta_ethdev.c | 3 +++ > drivers/net/mvpp2/mrvl_ethdev.c | 3 +++ > drivers/net/netvsc/hn_ethdev.c | 2 ++ > drivers/net/nfb/nfb_ethdev.c | 3 +++ > drivers/net/nfp/nfp_net.c | 3 +++ > drivers/net/octeontx/octeontx_ethdev.c | 2 ++ > drivers/net/pfe/pfe_ethdev.c | 3 +++ > drivers/net/sfc/sfc_ethdev.c | 32 ++++++++++++------------- > drivers/net/szedata2/rte_eth_szedata2.c | 3 +++ > drivers/net/thunderx/nicvf_ethdev.c | 7 +++--- > drivers/net/vhost/rte_eth_vhost.c | 7 +++--- > drivers/net/virtio/virtio_ethdev.c | 2 ++ > drivers/net/vmxnet3/vmxnet3_ethdev.c | 2 ++ > 37 files changed, 119 insertions(+), 35 deletions(-) >=20 > diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c > b/drivers/net/af_xdp/rte_eth_af_xdp.c > index 60add9ead4..b289076e01 100644 > --- a/drivers/net/af_xdp/rte_eth_af_xdp.c > +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c > @@ -708,6 +708,9 @@ eth_dev_close(struct rte_eth_dev *dev) > struct pkt_rx_queue *rxq; > int i; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > AF_XDP_LOG(INFO, "Closing AF_XDP ethdev on numa socket %u\n", > rte_socket_id()); >=20 > diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c > index 83dc4ecd2c..3e96445fdb 100644 > --- a/drivers/net/ark/ark_ethdev.c > +++ b/drivers/net/ark/ark_ethdev.c > @@ -680,6 +680,9 @@ eth_ark_dev_close(struct rte_eth_dev *dev) > struct ark_adapter *ark =3D dev->data->dev_private; > uint16_t i; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > if (ark->user_ext.dev_close) > ark->user_ext.dev_close(dev, > ark->user_data[dev->data->port_id]); > diff --git a/drivers/net/avp/avp_ethdev.c b/drivers/net/avp/avp_ethdev.c > index c730b7ab86..95fdb57451 100644 > --- a/drivers/net/avp/avp_ethdev.c > +++ b/drivers/net/avp/avp_ethdev.c > @@ -2107,6 +2107,9 @@ avp_dev_close(struct rte_eth_dev *eth_dev) > struct avp_dev *avp =3D AVP_DEV_PRIVATE_TO_HW(eth_dev->data- > >dev_private); > int ret; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > rte_spinlock_lock(&avp->lock); > if (avp->flags & AVP_F_DETACHED) { > PMD_DRV_LOG(ERR, "Operation not supported during VM > live migration\n"); diff --git a/drivers/net/bnxt/bnxt_ethdev.c > b/drivers/net/bnxt/bnxt_ethdev.c index a77bab661d..d45347e8ca 100644 > --- a/drivers/net/bnxt/bnxt_ethdev.c > +++ b/drivers/net/bnxt/bnxt_ethdev.c > @@ -1361,6 +1361,9 @@ static int bnxt_dev_close_op(struct rte_eth_dev > *eth_dev) { > struct bnxt *bp =3D eth_dev->data->dev_private; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > /* cancel the recovery handler before remove dev */ > rte_eal_alarm_cancel(bnxt_dev_reset_and_resume, (void *)bp); > rte_eal_alarm_cancel(bnxt_dev_recover, (void *)bp); diff --git > a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c index > df8680c113..c419fe63b8 100644 > --- a/drivers/net/bnxt/bnxt_reps.c > +++ b/drivers/net/bnxt/bnxt_reps.c > @@ -220,6 +220,9 @@ int bnxt_vf_representor_uninit(struct rte_eth_dev > *eth_dev) > (struct bnxt_vf_representor *)eth_dev->data->dev_private; > uint16_t vf_id; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > PMD_DRV_LOG(DEBUG, "BNXT Port:%d VFR uninit\n", eth_dev- > >data->port_id); > eth_dev->data->mac_addrs =3D NULL; > eth_dev->dev_ops =3D NULL; > diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c > b/drivers/net/cxgbe/cxgbe_ethdev.c > index e4bbba5c32..16beb2d435 100644 > --- a/drivers/net/cxgbe/cxgbe_ethdev.c > +++ b/drivers/net/cxgbe/cxgbe_ethdev.c > @@ -326,6 +326,9 @@ int cxgbe_dev_close(struct rte_eth_dev *eth_dev) >=20 > CXGBE_FUNC_TRACE(); >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > if (!(adapter->flags & FULL_INIT_DONE)) > return 0; >=20 > diff --git a/drivers/net/e1000/em_ethdev.c > b/drivers/net/e1000/em_ethdev.c index 6a6ae0e9d5..d050eb478a 100644 > --- a/drivers/net/e1000/em_ethdev.c > +++ b/drivers/net/e1000/em_ethdev.c > @@ -762,6 +762,9 @@ eth_em_close(struct rte_eth_dev *dev) > struct rte_pci_device *pci_dev =3D RTE_ETH_DEV_TO_PCI(dev); > struct rte_intr_handle *intr_handle =3D &pci_dev->intr_handle; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > eth_em_stop(dev); > adapter->stopped =3D 1; > em_dev_free_queues(dev); > diff --git a/drivers/net/e1000/igb_ethdev.c > b/drivers/net/e1000/igb_ethdev.c index f8778207ef..cb3d97e2a3 100644 > --- a/drivers/net/e1000/igb_ethdev.c > +++ b/drivers/net/e1000/igb_ethdev.c > @@ -1535,6 +1535,9 @@ eth_igb_close(struct rte_eth_dev *dev) > struct e1000_filter_info *filter_info =3D > E1000_DEV_PRIVATE_TO_FILTER_INFO(dev->data- > >dev_private); >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > eth_igb_stop(dev); >=20 > e1000_phy_hw_reset(hw); > @@ -3382,6 +3385,9 @@ igbvf_dev_close(struct rte_eth_dev *dev) >=20 > PMD_INIT_FUNC_TRACE(); >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > e1000_reset_hw(hw); >=20 > igbvf_dev_stop(dev); > diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c > index cf1c0b9795..07ae9bab32 100644 > --- a/drivers/net/ena/ena_ethdev.c > +++ b/drivers/net/ena/ena_ethdev.c > @@ -493,6 +493,9 @@ static int ena_close(struct rte_eth_dev *dev) > struct rte_intr_handle *intr_handle =3D &pci_dev->intr_handle; > struct ena_adapter *adapter =3D dev->data->dev_private; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > if (adapter->state =3D=3D ENA_ADAPTER_STATE_RUNNING) > ena_stop(dev); > adapter->state =3D ENA_ADAPTER_STATE_CLOSED; diff --git > a/drivers/net/enetc/enetc_ethdev.c b/drivers/net/enetc/enetc_ethdev.c > index 325c93b92a..b3dec7e64d 100644 > --- a/drivers/net/enetc/enetc_ethdev.c > +++ b/drivers/net/enetc/enetc_ethdev.c > @@ -551,6 +551,9 @@ enetc_dev_close(struct rte_eth_dev *dev) > uint16_t i; >=20 > PMD_INIT_FUNC_TRACE(); > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > enetc_dev_stop(dev); >=20 > for (i =3D 0; i < dev->data->nb_rx_queues; i++) { diff --git > a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c index > 27f60b45b8..60ee5e01de 100644 > --- a/drivers/net/enic/enic_ethdev.c > +++ b/drivers/net/enic/enic_ethdev.c > @@ -451,6 +451,9 @@ static int enicpmd_dev_close(struct rte_eth_dev > *eth_dev) > struct enic *enic =3D pmd_priv(eth_dev); >=20 > ENICPMD_FUNC_TRACE(); > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > enic_remove(enic); >=20 > return 0; > diff --git a/drivers/net/fm10k/fm10k_ethdev.c > b/drivers/net/fm10k/fm10k_ethdev.c > index 23f4d04068..17cf0328c6 100644 > --- a/drivers/net/fm10k/fm10k_ethdev.c > +++ b/drivers/net/fm10k/fm10k_ethdev.c > @@ -2784,6 +2784,8 @@ fm10k_dev_close(struct rte_eth_dev *dev) > struct rte_intr_handle *intr_handle =3D &pdev->intr_handle; >=20 > PMD_INIT_FUNC_TRACE(); > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; >=20 > fm10k_mbx_lock(hw); > hw->mac.ops.update_lport_state(hw, hw->mac.dglort_map, @@ - > 3236,14 +3238,7 @@ static int eth_fm10k_dev_uninit(struct rte_eth_dev > *dev) { > PMD_INIT_FUNC_TRACE(); > - > - /* only uninitialize in the primary process */ > - if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > - return 0; > - > - /* safe to close dev here */ > fm10k_dev_close(dev); > - > return 0; > } >=20 > diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c > b/drivers/net/hinic/hinic_pmd_ethdev.c > index 623534fda4..1b175aeace 100644 > --- a/drivers/net/hinic/hinic_pmd_ethdev.c > +++ b/drivers/net/hinic/hinic_pmd_ethdev.c > @@ -2940,6 +2940,9 @@ static int hinic_dev_close(struct rte_eth_dev *dev) > { > struct hinic_nic_dev *nic_dev =3D > HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev); >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > if (rte_bit_relaxed_test_and_set32(HINIC_DEV_CLOSE, > &nic_dev->dev_status)) { > PMD_DRV_LOG(WARNING, "Device %s already closed", diff - > -git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c > index 6fb88148b8..feeed2dec0 100644 > --- a/drivers/net/i40e/i40e_ethdev.c > +++ b/drivers/net/i40e/i40e_ethdev.c > @@ -2620,6 +2620,8 @@ i40e_dev_close(struct rte_eth_dev *dev) > int retries =3D 0; >=20 > PMD_INIT_FUNC_TRACE(); > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; >=20 > ret =3D rte_eth_switch_domain_free(pf->switch_domain_id); > if (ret) > diff --git a/drivers/net/i40e/i40e_ethdev_vf.c > b/drivers/net/i40e/i40e_ethdev_vf.c > index 4aaf41956c..4d6510d1ff 100644 > --- a/drivers/net/i40e/i40e_ethdev_vf.c > +++ b/drivers/net/i40e/i40e_ethdev_vf.c > @@ -2402,6 +2402,9 @@ i40evf_dev_close(struct rte_eth_dev *dev) > struct i40e_hw *hw =3D I40E_DEV_PRIVATE_TO_HW(dev->data- > >dev_private); > struct i40e_vf *vf =3D I40EVF_DEV_PRIVATE_TO_VF(dev->data- > >dev_private); >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > i40evf_dev_stop(dev); > i40e_dev_free_queues(dev); > /* > diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethde= v.c > index 512ade2ad0..a5b1433306 100644 > --- a/drivers/net/iavf/iavf_ethdev.c > +++ b/drivers/net/iavf/iavf_ethdev.c > @@ -1468,6 +1468,9 @@ iavf_dev_close(struct rte_eth_dev *dev) > IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); > struct iavf_info *vf =3D IAVF_DEV_PRIVATE_TO_VF(dev->data- > >dev_private); >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > iavf_dev_stop(dev); > iavf_flow_flush(dev, NULL); > iavf_flow_uninit(adapter); > diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c > index 85a3ca6a2d..96159c92f2 100644 > --- a/drivers/net/ice/ice_ethdev.c > +++ b/drivers/net/ice/ice_ethdev.c > @@ -2435,6 +2435,9 @@ ice_dev_close(struct rte_eth_dev *dev) > struct ice_adapter *ad =3D > ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > /* Since stop will make link down, then the link event will be > * triggered, disable the irq firstly to avoid the port_infoe etc > * resources deallocation causing the interrupt service thread diff -- > git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c index > 9d27fc0d07..7f5066df4b 100644 > --- a/drivers/net/igc/igc_ethdev.c > +++ b/drivers/net/igc/igc_ethdev.c > @@ -1175,6 +1175,8 @@ eth_igc_close(struct rte_eth_dev *dev) > int retry =3D 0; >=20 > PMD_INIT_FUNC_TRACE(); > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; >=20 > if (!adapter->stopped) > eth_igc_stop(dev); > @@ -1363,10 +1365,6 @@ static int > eth_igc_dev_uninit(__rte_unused struct rte_eth_dev *eth_dev) { > PMD_INIT_FUNC_TRACE(); > - > - if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > - return 0; > - > eth_igc_close(eth_dev); > return 0; > } > diff --git a/drivers/net/ionic/ionic_ethdev.c > b/drivers/net/ionic/ionic_ethdev.c > index 1775fd29b7..ef7d06e526 100644 > --- a/drivers/net/ionic/ionic_ethdev.c > +++ b/drivers/net/ionic/ionic_ethdev.c > @@ -963,6 +963,8 @@ ionic_dev_close(struct rte_eth_dev *eth_dev) > int err; >=20 > IONIC_PRINT_CALL(); > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; >=20 > err =3D ionic_lif_stop(lif); > if (err) { > diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c > b/drivers/net/ipn3ke/ipn3ke_representor.c > index d49abbf758..b9fb4d4e46 100644 > --- a/drivers/net/ipn3ke/ipn3ke_representor.c > +++ b/drivers/net/ipn3ke/ipn3ke_representor.c > @@ -214,6 +214,9 @@ ipn3ke_rpst_dev_close(struct rte_eth_dev *dev) > struct ipn3ke_hw *hw =3D IPN3KE_DEV_PRIVATE_TO_HW(dev); > struct ipn3ke_rpst *rpst =3D IPN3KE_DEV_PRIVATE_TO_RPST(dev); >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > if (hw->retimer.mac_type =3D=3D > IFPGA_RAWDEV_RETIMER_MAC_TYPE_10GE_XFI) { > /* Disable the TX path */ > ipn3ke_xmac_tx_disable(hw, rpst->port_id, 0); diff --git > a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c > index 600e9d6928..84c1b0f7a1 100644 > --- a/drivers/net/ixgbe/ixgbe_ethdev.c > +++ b/drivers/net/ixgbe/ixgbe_ethdev.c > @@ -2995,6 +2995,8 @@ ixgbe_dev_close(struct rte_eth_dev *dev) > int ret; >=20 > PMD_INIT_FUNC_TRACE(); > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; >=20 > ixgbe_pf_reset_hw(hw); >=20 > @@ -5442,6 +5444,8 @@ ixgbevf_dev_close(struct rte_eth_dev *dev) > struct rte_intr_handle *intr_handle =3D &pci_dev->intr_handle; >=20 > PMD_INIT_FUNC_TRACE(); > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; >=20 > ixgbe_reset_hw(hw); >=20 > diff --git a/drivers/net/kni/rte_eth_kni.c b/drivers/net/kni/rte_eth_kni.= c > index 2a4058f7b0..be747adf86 100644 > --- a/drivers/net/kni/rte_eth_kni.c > +++ b/drivers/net/kni/rte_eth_kni.c > @@ -204,6 +204,9 @@ eth_kni_close(struct rte_eth_dev *eth_dev) > struct pmd_internals *internals; > int ret; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > eth_kni_dev_stop(eth_dev); >=20 > /* mac_addrs must not be freed alone because part of dev_private > */ diff --git a/drivers/net/liquidio/lio_ethdev.c > b/drivers/net/liquidio/lio_ethdev.c > index 93e2ed5670..1a41f27198 100644 > --- a/drivers/net/liquidio/lio_ethdev.c > +++ b/drivers/net/liquidio/lio_ethdev.c > @@ -1555,6 +1555,9 @@ lio_dev_close(struct rte_eth_dev *eth_dev) { > struct lio_device *lio_dev =3D LIO_DEV(eth_dev); >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > lio_dev_info(lio_dev, "closing port %d\n", eth_dev->data->port_id); >=20 > if (lio_dev->intf_open) > diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index > 3e57875414..cfcfb8a8fc 100644 > --- a/drivers/net/mlx4/mlx4.c > +++ b/drivers/net/mlx4/mlx4.c > @@ -376,6 +376,8 @@ mlx4_dev_close(struct rte_eth_dev *dev) > struct mlx4_priv *priv =3D dev->data->dev_private; > unsigned int i; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > DEBUG("%p: closing device \"%s\"", > (void *)dev, > ((priv->ctx !=3D NULL) ? priv->ctx->device->name : "")); diff --g= it > a/drivers/net/mvneta/mvneta_ethdev.c > b/drivers/net/mvneta/mvneta_ethdev.c > index db142bec23..607771149a 100644 > --- a/drivers/net/mvneta/mvneta_ethdev.c > +++ b/drivers/net/mvneta/mvneta_ethdev.c > @@ -435,6 +435,9 @@ mvneta_dev_close(struct rte_eth_dev *dev) > struct mvneta_priv *priv =3D dev->data->dev_private; > int i; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > if (priv->ppio) > mvneta_dev_stop(dev); >=20 > diff --git a/drivers/net/mvpp2/mrvl_ethdev.c > b/drivers/net/mvpp2/mrvl_ethdev.c index cfb97e4f8f..a230a96840 100644 > --- a/drivers/net/mvpp2/mrvl_ethdev.c > +++ b/drivers/net/mvpp2/mrvl_ethdev.c > @@ -861,6 +861,9 @@ mrvl_dev_close(struct rte_eth_dev *dev) > struct mrvl_priv *priv =3D dev->data->dev_private; > size_t i; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > mrvl_flush_rx_queues(dev); > mrvl_flush_tx_shadow_queues(dev); > mrvl_flow_deinit(dev); > diff --git a/drivers/net/netvsc/hn_ethdev.c > b/drivers/net/netvsc/hn_ethdev.c index 19a9eb6bc2..5ae2d469c8 100644 > --- a/drivers/net/netvsc/hn_ethdev.c > +++ b/drivers/net/netvsc/hn_ethdev.c > @@ -842,6 +842,8 @@ static int > hn_dev_close(struct rte_eth_dev *dev) > { > PMD_INIT_FUNC_TRACE(); > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; >=20 > hn_vf_close(dev); > hn_dev_free_queues(dev); > diff --git a/drivers/net/nfb/nfb_ethdev.c b/drivers/net/nfb/nfb_ethdev.c > index d937ac6922..7ee7294143 100644 > --- a/drivers/net/nfb/nfb_ethdev.c > +++ b/drivers/net/nfb/nfb_ethdev.c > @@ -217,6 +217,9 @@ nfb_eth_dev_close(struct rte_eth_dev *dev) > uint16_t nb_rx =3D dev->data->nb_rx_queues; > uint16_t nb_tx =3D dev->data->nb_tx_queues; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > nfb_eth_dev_stop(dev); >=20 > nfb_nc_rxmac_deinit(internals->rxmac, internals->max_rxmac); diff > --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c index > ce25cf1ed4..c1da66e3d6 100644 > --- a/drivers/net/nfp/nfp_net.c > +++ b/drivers/net/nfp/nfp_net.c > @@ -871,6 +871,9 @@ nfp_net_close(struct rte_eth_dev *dev) > struct rte_pci_device *pci_dev; > int i; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > PMD_INIT_LOG(DEBUG, "Close"); >=20 > hw =3D NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); > diff --git a/drivers/net/octeontx/octeontx_ethdev.c > b/drivers/net/octeontx/octeontx_ethdev.c > index a263f45399..aa9ef3bb70 100644 > --- a/drivers/net/octeontx/octeontx_ethdev.c > +++ b/drivers/net/octeontx/octeontx_ethdev.c > @@ -487,6 +487,8 @@ octeontx_dev_close(struct rte_eth_dev *dev) > int ret; >=20 > PMD_INIT_FUNC_TRACE(); > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; >=20 > rte_event_dev_close(nic->evdev); >=20 > diff --git a/drivers/net/pfe/pfe_ethdev.c b/drivers/net/pfe/pfe_ethdev.c > index bb2ae0df34..f0de1c8a2e 100644 > --- a/drivers/net/pfe/pfe_ethdev.c > +++ b/drivers/net/pfe/pfe_ethdev.c > @@ -396,6 +396,9 @@ pfe_eth_close(struct rte_eth_dev *dev) > if (!g_pfe) > return -1; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > pfe_eth_stop(dev); > /* Close the device file for link status */ > pfe_eth_close_cdev(dev->data->dev_private); > diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c > index 1c72e40b75..0558f1808d 100644 > --- a/drivers/net/sfc/sfc_ethdev.c > +++ b/drivers/net/sfc/sfc_ethdev.c > @@ -318,6 +318,17 @@ sfc_dev_set_link_down(struct rte_eth_dev *dev) > return 0; > } >=20 > +static void > +sfc_eth_dev_secondary_clear_ops(struct rte_eth_dev *dev) { > + free(dev->process_private); > + dev->process_private =3D NULL; > + dev->dev_ops =3D NULL; > + dev->tx_pkt_prepare =3D NULL; > + dev->tx_pkt_burst =3D NULL; > + dev->rx_pkt_burst =3D NULL; > +} > + > static int > sfc_dev_close(struct rte_eth_dev *dev) > { > @@ -325,6 +336,11 @@ sfc_dev_close(struct rte_eth_dev *dev) >=20 > sfc_log_init(sa, "entry"); >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) { > + sfc_eth_dev_secondary_clear_ops(dev); > + return 0; > + } > + > sfc_adapter_lock(sa); > switch (sa->state) { > case SFC_ADAPTER_STARTED: > @@ -2101,17 +2117,6 @@ sfc_eth_dev_secondary_init(struct rte_eth_dev > *dev, uint32_t logtype_main) > return rc; > } >=20 > -static void > -sfc_eth_dev_secondary_clear_ops(struct rte_eth_dev *dev) -{ > - free(dev->process_private); > - dev->process_private =3D NULL; > - dev->dev_ops =3D NULL; > - dev->tx_pkt_prepare =3D NULL; > - dev->tx_pkt_burst =3D NULL; > - dev->rx_pkt_burst =3D NULL; > -} > - > static void > sfc_register_dp(void) > { > @@ -2245,11 +2250,6 @@ sfc_eth_dev_init(struct rte_eth_dev *dev) static > int sfc_eth_dev_uninit(struct rte_eth_dev *dev) { > - if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) { > - sfc_eth_dev_secondary_clear_ops(dev); > - return 0; > - } > - > sfc_dev_close(dev); >=20 > return 0; > diff --git a/drivers/net/szedata2/rte_eth_szedata2.c > b/drivers/net/szedata2/rte_eth_szedata2.c > index 5f589dfa4c..7e9fafdcf7 100644 > --- a/drivers/net/szedata2/rte_eth_szedata2.c > +++ b/drivers/net/szedata2/rte_eth_szedata2.c > @@ -1163,6 +1163,9 @@ eth_dev_close(struct rte_eth_dev *dev) > uint16_t nb_rx =3D dev->data->nb_rx_queues; > uint16_t nb_tx =3D dev->data->nb_tx_queues; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > eth_dev_stop(dev); >=20 > free(internals->sze_dev_path); > diff --git a/drivers/net/thunderx/nicvf_ethdev.c > b/drivers/net/thunderx/nicvf_ethdev.c > index 3d7348771a..cc6eb4ba24 100644 > --- a/drivers/net/thunderx/nicvf_ethdev.c > +++ b/drivers/net/thunderx/nicvf_ethdev.c > @@ -1859,6 +1859,8 @@ nicvf_dev_close(struct rte_eth_dev *dev) > struct nicvf *nic =3D nicvf_pmd_priv(dev); >=20 > PMD_INIT_FUNC_TRACE(); > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; >=20 > nicvf_dev_stop_cleanup(dev, true); > nicvf_periodic_alarm_stop(nicvf_interrupt, dev); @@ -2119,10 > +2121,7 @@ static int nicvf_eth_dev_uninit(struct rte_eth_dev *dev) { > PMD_INIT_FUNC_TRACE(); > - > - if (rte_eal_process_type() =3D=3D RTE_PROC_PRIMARY) > - nicvf_dev_close(dev); > - > + nicvf_dev_close(dev); > return 0; > } > static int > diff --git a/drivers/net/vhost/rte_eth_vhost.c > b/drivers/net/vhost/rte_eth_vhost.c > index 45552ef742..32ad27fe4e 100644 > --- a/drivers/net/vhost/rte_eth_vhost.c > +++ b/drivers/net/vhost/rte_eth_vhost.c > @@ -1171,6 +1171,9 @@ eth_dev_close(struct rte_eth_dev *dev) > struct internal_list *list; > unsigned int i; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; > + > internal =3D dev->data->dev_private; > if (!internal) > return 0; > @@ -1655,11 +1658,7 @@ rte_pmd_vhost_remove(struct rte_vdev_device > *dev) > if (eth_dev =3D=3D NULL) > return 0; >=20 > - if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > - return rte_eth_dev_release_port(eth_dev); > - > eth_dev_close(eth_dev); > - > rte_eth_dev_release_port(eth_dev); >=20 > return 0; > diff --git a/drivers/net/virtio/virtio_ethdev.c > b/drivers/net/virtio/virtio_ethdev.c > index b6ed5829bd..f2117675b3 100644 > --- a/drivers/net/virtio/virtio_ethdev.c > +++ b/drivers/net/virtio/virtio_ethdev.c > @@ -711,6 +711,8 @@ virtio_dev_close(struct rte_eth_dev *dev) > struct rte_intr_conf *intr_conf =3D &dev->data->dev_conf.intr_conf; >=20 > PMD_INIT_LOG(DEBUG, "virtio_dev_close"); > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; >=20 > if (!hw->opened) > return 0; > diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c > b/drivers/net/vmxnet3/vmxnet3_ethdev.c > index 34a169d2c0..fa950e1ba0 100644 > --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c > +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c > @@ -889,6 +889,8 @@ static int > vmxnet3_dev_close(struct rte_eth_dev *dev) { > PMD_INIT_FUNC_TRACE(); > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return 0; >=20 > vmxnet3_dev_stop(dev); > vmxnet3_free_queues(dev); > -- > 2.28.0