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 A9BC2A04DB; Mon, 28 Sep 2020 20:25:19 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 860551D685; Mon, 28 Sep 2020 20:25:18 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id C02A81D67F for ; Mon, 28 Sep 2020 20:25:16 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 08SIK9As008936; Mon, 28 Sep 2020 11:25:04 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pfpt0220; bh=Sef0Tp4RwVarQKurXhf+FDh1iFh/565Fr3wihy3Bz9c=; b=k9O3XmMEHl41oN+HYT6ilS+yOSfaloMJCz+FasXtUrGr1hnkMoSoF2IWnOSL9OSflhaj 69X232qUlV5oXEob5xBJJADvHDMGBY2ZUbM3RT9n98cpkSH9NPTfMcEXg0Up+vH6Mpsu 1pCsvsENLQPrVOR6HSuFJI3u5yGmbDgSH3zqEzVWxToSCgIlxAzmH6FONID5f5V7U7sD F2XbOCTbEU8wtJez83aQnRe53xi2J3DalE6tx0YcCHwKe2Qgcx9rp/Tu//Ruz2VFGpjI 3ga4whHozlgVCfZhSUAhwAnYHVCMxiDxCXzOCmZQlN0g0RoD1TldxzLnefDNEdfXgElf iw== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0b-0016f401.pphosted.com with ESMTP id 33t55p2j3k-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 28 Sep 2020 11:25:04 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 28 Sep 2020 11:25:02 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.177) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Mon, 28 Sep 2020 11:25:02 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZKhlXT31WPSGsYJmk7B05OmNf4UaVTovXtyoTKZ3Mxkp4In3FC/a0IHZbqaUq7bJu9mQgrO5BngkB+phEYbLcQsrzTLns6kIhDKXf52JEEX6eDKRpRgd+WQQJmX+DGogZEEl9X1BelnInq0i+lpY7ju5PTN/fyFGeXunysRK9rhAUudK9AIrCkeFoUO9pN8QQOSquBSXm/6qpsI8Ip5bkC9MFzPvOmR+UNwcyyiJf4ubhmEG9WD85rcJz2UDOsmoYF2d451sMk68SE1CVcmzCZ50qpu635asJO/EBzL8Gw/9pZPHqaCAeuMcCvkarp9MBSFWSKNkf1miE3X5vYAhBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Sef0Tp4RwVarQKurXhf+FDh1iFh/565Fr3wihy3Bz9c=; b=jqmkx1sXp/8ZrPlwmv1rX5PG1eltVWMQtWS0/KveFPP14uawS0tbsXqY+SyzgPfHW/ka3ZONJ/qzEoR56n64gaZbwQmiH9V531kq+7A26N85KVCgTeMZUMWxfmadxi9L4QKmesL0SeeJZl7PWnGm9i65iQQZKt9fhbUt1vdcyrhlh89oT7CrgjZu+q3lMfWvX5UYQLC1Eks2Z+ED/ywENKaMdVdg6xohfJghYmZdJw+UHWYqRQOEjvvnmxSFOBEBTkoa3pJ2bbLqBz/y6QAX+rCBiGFdz4RZ54sXII0PL8ecPUloBAN0liHUIhK5Anuvp4C9HF/MN+GWKCzJS/Gp6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Sef0Tp4RwVarQKurXhf+FDh1iFh/565Fr3wihy3Bz9c=; b=cc2QZ1Yb1G8xJuEsCnaZ1nrnCRq7TcdpJJwYoediZdnELu04+0k0Bp7H3HXrPfNbVDa/F92L/U1gs8IjH0ueAPStbQdylyZFUz0cWKrzRW7AZEAGkhOSjpsojCbIlmWD9VQZp/M55VI7niUP5rFI7rcXGNgSV3rWG7jgBBZalNY= Received: from DM5PR18MB2214.namprd18.prod.outlook.com (2603:10b6:4:b9::21) by DM5PR1801MB2041.namprd18.prod.outlook.com (2603:10b6:4:67::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3412.26; Mon, 28 Sep 2020 18:25:00 +0000 Received: from DM5PR18MB2214.namprd18.prod.outlook.com ([fe80::d0b8:c02e:9d8e:95b]) by DM5PR18MB2214.namprd18.prod.outlook.com ([fe80::d0b8:c02e:9d8e:95b%3]) with mapi id 15.20.3391.026; Mon, 28 Sep 2020 18:25:00 +0000 From: Liron Himi To: Thomas Monjalon , "dev@dpdk.org" CC: "ferruh.yigit@intel.com" , "arybchenko@solarflare.com" , Ciara Loftus , Qi Zhang , Shepard Siegel , Ed Czeck , "John Miller" , Steven Webster , Matt Peters , "Ajit Khaparde" , Somnath Kotur , Rahul Lakkireddy , Hemant Agrawal , Sachin Saxena , Jeff Guo , Haiyue Wang , Marcin Wojtas , "Michal Krawczyk" , Guy Tzalik , "Evgeny Schemeilin" , Igor Chauskin , "Gagandeep Singh" , John Daley , Hyong Youb Kim , Xiao Wang , Ziyang Xuan , Xiaoyun Wang , Guoyang Zhou , Beilei Xing , Jingjing Wu , Qiming Yang , Alfredo Cardigliano , Rosen Xu , 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 Kollanukkaran" , "Maciej Czekaj [C]" , Maxime Coquelin , "Chenbo Xia" , Zhihong Wang , Yong Wang , Anatoly Burakov , "Liron Himi" Thread-Topic: [EXT] [PATCH v2 19/25] drivers/net: check process type in close operation Thread-Index: AQHWlSgWrBKOmJjfj0md6sx5rS5AGql+XvWg Date: Mon, 28 Sep 2020 18:25:00 +0000 Message-ID: References: <20200913220711.3768597-1-thomas@monjalon.net> <20200927234249.3198780-1-thomas@monjalon.net> <20200927234249.3198780-20-thomas@monjalon.net> In-Reply-To: <20200927234249.3198780-20-thomas@monjalon.net> Accept-Language: he-IL, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: monjalon.net; dkim=none (message not signed) header.d=none;monjalon.net; dmarc=none action=none header.from=marvell.com; x-originating-ip: [46.117.144.7] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 850a5859-4e24-41f6-bd15-08d863dbcfb7 x-ms-traffictypediagnostic: DM5PR1801MB2041: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3173; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Lk1+2y2/KoN91m7Ro6+6ZyVj0tG5qBIirfStzc7hfSWmBpcS4/gciWrIsQzpLxLcciB05Pgt6tm2eGVh8mp3hqSbwxI10SESz5g63AlDMcttd+m3obETEnBABWQb0CAQA3QBnHc5OM0iFZEcBvA044sTKqDx4EMJaJPRsmSnokAs/gQVVwD2lFQ6tdxKe2TqFAsSAU2zJNAnnfZZbx4ZtYidwdnslez7PC3clK0794tjuguwCFezbQ3FqGKPNzg7emJOG6DAcjVop1FMxfonbImj1VsbwCBhlbQUzJ7Rq2QJs2yMuhc+uYHNRVSS116ufyB5ghU1rhtuk3Vjk7687Hl3AEqtzg8zTcxJktQHL6vUT7HytJy6hFnjMcwSo97N x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM5PR18MB2214.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(366004)(346002)(376002)(136003)(39850400004)(110136005)(7366002)(7416002)(7406005)(4326008)(7696005)(5660300002)(55016002)(54906003)(316002)(186003)(9686003)(83380400001)(66476007)(6506007)(26005)(53546011)(2906002)(66446008)(64756008)(66556008)(107886003)(33656002)(8676002)(86362001)(76116006)(52536014)(66946007)(478600001)(30864003)(8936002)(71200400001)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: hzu7/oYXi+4+I9QoqgR7MMHCnxebwSU5gcZZWuclaDNOGiDqTjcUvhbrt26GK7ke+/NGXhMrqmVBug+XnWANzi6RHJ68cOFPaqJhgJQcaJ2cqmNt+g4czrdSABgk5iG5tWw3r4SNlY73MmM+u3pxfINWKUrEsF/hkbrKVJOVvzLMerinhTeP6RlimpxrCB2Uc3HGfFixcQGHYZZ1dOAEzLqsWW8rXq6LfmLGpDu8go9D+HcDmYB0aXUaojVg96App4/DH2VdKOnx0RO7eX1T+jtYdApzARBWVH9XsCBepQUEn9xWq7mAiKzLQ07xHWUjy/bA9AvZfQjYw2oqrWznQH8qy9L7UA3V+0G4XmY1QTg4x7gLvhFTqJeQv4zMyk/KY8LLXby92ftJXjDTgQnyF6A5i7SHTohe8F9HesK+iwix4/l4FIBFETQ0stgTqFcO2m3NS7Kg04B+sjqGnYlue3bCf8wv6jtTB4eP4MhVPVRGrB40zw3YJWG9b6j6o/KrET5Bl0NVthCgHRm0wnXSNSYxn4aoEOKR2ZlNw1ElhJa8P3bGUGVaLdNSEcIYG0GzVAd+4M57+3CdtQJ/5huNya9MsLK5CRJExvHLapxZm6Mw4Shk/w4uCUGBF6tfJzGvaWKB1Oxk4urx7j+olR/HpA== Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM5PR18MB2214.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 850a5859-4e24-41f6-bd15-08d863dbcfb7 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Sep 2020 18:25:00.3969 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: roN+MaT77hshj862gN+JzxfiSXK7oOenTweirMVbxOIjT8ekPv1cR4PHB7D8xKYRmU6ZjegEvriBXEi1myptKQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1801MB2041 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235, 18.0.687 definitions=2020-09-28_20:2020-09-28, 2020-09-28 signatures=0 Subject: Re: [dpdk-dev] [EXT] [PATCH v2 19/25] 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 mvpp2, mvneta. Reviewed-by: Liron Himi -----Original Message----- From: Thomas Monjalon =20 Sent: Monday, 28 September 2020 02:43 To: dev@dpdk.org Cc: ferruh.yigit@intel.com; arybchenko@solarflare.com; Ciara Loftus ; Qi Zhang ; Shepard Siegel ; Ed Czeck ; John Miller = ; Steven Webster ; Matt Peters ; Ajit Khaparde ; Somnath Kotur ; Rahul Lakkireddy <= rahul.lakkireddy@chelsio.com>; Hemant Agrawal ; Sac= hin Saxena ; Jeff Guo ; Haiyu= e Wang ; Marcin Wojtas ; Michal Kra= wczyk ; Guy Tzalik ; Evgeny Schemeilin= ; Igor Chauskin ; Gagandeep Singh <= g.singh@nxp.com>; John Daley ; Hyong Youb Kim ; Xiao Wang ; Ziyang Xuan ; Xiaoyun Wang ; Guoyang Zhou ; Beilei Xing ; Jingjing Wu ; Qiming Yang ; Alfredo Cardigliano = ; Rosen Xu ; Shijith Thotton ; Srisivasubramanian Srinivasan ;= Matan Azrad ; Shahaf Shuler ; Zyta S= zpak ; Liron Himi ; Stephen Hemminger = ; K. Y. Srinivasan ; Haiyang Zha= ng ; Long Li ; Martin Spinler= ; Heinrich Kuhn ; Harman K= alra ; Akhil Goyal ; Jerin Jacob K= ollanukkaran ; Maciej Czekaj [C] ;= Maxime Coquelin ; Chenbo Xia ; Zhihong Wang ; Yong Wang ; Anatoly Burakov Subject: [EXT] [PATCH v2 19/25] drivers/net: check process type in close op= eration External Email ---------------------------------------------------------------------- The secondary processes are not allowed to release shared resources. Only process-private ressources should be freed in a secondary process. Most of the time, there is no process-private ressource, so the close opera= tion is just forbidden in a secondary process. After adding proper check in the port close functions, some redundant check= s in the device remove functions are dropped. Signed-off-by: Thomas Monjalon --- 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/dpaa/dpaa_ethdev.c | 3 +++ drivers/net/dpaa2/dpaa2_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 ++ 39 files changed, 125 insertions(+), 35 deletions(-) diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_e= th_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 in= dex 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 in= dex 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..c419f= e63b8 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_eth= dev.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/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.= c index 7fe06e1830..01632e591c 100644 --- a/drivers/net/dpaa/dpaa_ethdev.c +++ b/drivers/net/dpaa/dpaa_ethdev.c @@ -379,6 +379,9 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev) =20 PMD_INIT_FUNC_TRACE(); =20 + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) + return 0; + dpaa_dev =3D container_of(rdev, struct rte_dpaa_device, device); intr_handle =3D &dpaa_dev->intr_handle; __fif =3D container_of(fif, struct __fman_if, __if); diff --git a/drivers= /net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index fb4165fa03..eb84d7231d 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -1246,6 +1246,9 @@ dpaa2_dev_close(struct rte_eth_dev *dev) =20 PMD_INIT_FUNC_TRACE(); =20 + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) + return 0; + dpaa2_flow_clean(dev); =20 /* Clean the device first */ 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 in= dex 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/ene= tc/enetc_ethdev.c b/drivers/net/enetc/enetc_ethdev.c index bdb32762ce..d42add3efb 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/ne= t/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c index 27f60b45b8..60e= e5e01de 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_de= v) 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_eth= dev.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/ne= t/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 6fb88148b8..fee= ed2dec0 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_ethd= ev_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_ethdev.= 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 in= dex 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 9d27fc= 0d07..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_eth= dev.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/i= pn3ke_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/i= xgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 426b7c9fe5..f6e383b1c2 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 3e5787= 5414..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 --git= 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_ethde= v.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 in= dex 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..c1= da66e3d6 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 in= dex 9d5415d9b1..a7e9d97ba9 100644 --- a/drivers/net/pfe/pfe_ethdev.c +++ b/drivers/net/pfe/pfe_ethdev.c @@ -407,6 +407,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_exit(dev, g_pfe); =20 if (g_pfe->nb_devs =3D=3D 0) { diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c in= dex 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 in= t 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/nic= vf_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 @@ s= tatic 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/vmx= net3_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