From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 07675A0548; Thu, 2 Jun 2022 03:55:33 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 24D3C42B85; Thu, 2 Jun 2022 03:55:05 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2106.outbound.protection.outlook.com [40.107.220.106]) by mails.dpdk.org (Postfix) with ESMTP id D9B1442B6E for ; Thu, 2 Jun 2022 03:55:03 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hI5UwCZSNNMEbeM+TmzDoxYqJ+HwUDWFzYf8wuI4UciMKrOCfWu7OZnL6IFfJIQulM8m3VRtt+fQboRR66KoM9Gbf8P4oFd4p4XfIJ05ZiTpbEuMf5ZwfDN40PC3FtiYgIeAlxRvJMYGptbjmEg/PIWnymWznetDUJ3FoQsKjDw++C8K5kEHhgbFi6gxCKqiLsoFKCYpdAkx7n95WUdOY0cmdZVEHZAAhT7hSx+8C6IdtH6xEiEImUBIQ3cUENtB/AMGMGIWcT7gKwoAfupx9HjGNKNV/QDZIrSYpeQ5WsVfBFeaaGMqdl4IA46t0OgM1xV3nZHIOc/pCInpz9/kfA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=L/UUeZmvBrxntf4SHCWo+DtJOwVW6aRvFfE056LN4bc=; b=RUlF3sWyo0f5DOoXetYNC4SYk6KeYAxO5BAbVFSJFdlbj9Ya2YKT2tgz0Ppz9ts6PWxJxZNa7kV19UQSOm9tuJLwzwPCsf0lZq3G89dK1niDiixMIeWUvFh66MBJMcs2/d8XD7zuvHu72AbFKCGtanq0EGvKQQFtQBfljRIZ359O8jGEohe48ZOOpChvBxK1wkrIqAsZEiQ5SRXZ/1Isgd1sgcsH5PUBcCCT1ZBQjnkbOyhNgK/c0tdmi5ecJuLiilDnJAwr7U3R541mJl8KheoifuJqJXyLAworwjWPy4WssqBe06ecoSmISxNmyaZdDEjyE5nAIcFsGW53HXtKfg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=L/UUeZmvBrxntf4SHCWo+DtJOwVW6aRvFfE056LN4bc=; b=gwEifRJNqNNUPn2ZnipUbnyFfo0JwcoL/2njw+8KJQT0HYalHCgNF+nNJi7PwANR6vfTbplF8zawG6zFchH4xwdmQgDPWi+X8/Ur8GPKx4RZRUpzAxZiJgVcuxXJkOEBHv0gTK9p95PrCgQ0NAEIhz76WxpPfK6VTOZEao17OEo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from DM6PR13MB3004.namprd13.prod.outlook.com (2603:10b6:5:191::21) by DM4PR13MB5858.namprd13.prod.outlook.com (2603:10b6:8:46::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.11; Thu, 2 Jun 2022 01:55:02 +0000 Received: from DM6PR13MB3004.namprd13.prod.outlook.com ([fe80::d902:ed7d:82bb:c753]) by DM6PR13MB3004.namprd13.prod.outlook.com ([fe80::d902:ed7d:82bb:c753%4]) with mapi id 15.20.5314.013; Thu, 2 Jun 2022 01:55:02 +0000 From: Jin Liu To: dev@dpdk.org Cc: niklas.soderlund@corigine.com, Jin Liu , Diana Wang , Peng Zhang , Chaoyong He Subject: [PATCH 11/14] net/nfp: nfdk stop and close function Date: Thu, 2 Jun 2022 03:53:01 +0200 Message-Id: <20220602015304.710197-12-jin.liu@corigine.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220602015304.710197-1-jin.liu@corigine.com> References: <20220602015304.710197-1-jin.liu@corigine.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: LO4P123CA0457.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1aa::12) To DM6PR13MB3004.namprd13.prod.outlook.com (2603:10b6:5:191::21) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d6d00f54-7362-44cb-d2eb-08da443ae83f X-MS-TrafficTypeDiagnostic: DM4PR13MB5858:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 26/7EON0YxQGKFwww52mXq4+5CQhyrn0/n0gAaGjRP9Dj1Dvi4BM8bqKqmE4KqZJYjCmkEKLJJrn2OLqqK+eZaZsAo8ll4tmaoAmlyEa9mTChjWviCyRQdWjyut53WR3iKh1DhbHruTLBUpvaQe7Ac5nkG4VJVsgnKnIf3+HK+Fq5F8glZ++K9uNm+ZeF+tfWS8G76yi/n96IfCR5T1Wtu8hJ8CevKykT6aih2kuEaAXoXY0JTvPNs5/c6+I+sK18YT3BiwIDI7AxuNRWo/xkI977qpWabux4X/0h/T52DYxbF0C4ibwqXAJUs3JCjBZiyf8Lq5jAiMnNu+3qWPcqAsVbbi42fK04p/klp7dv2x8y1dGno2GG1BX3oKLdZLABKEfzNOE8Adu6toizlZwchS6La9r9RJNmfuLGwC5sWw5StxZglfbeCsjL+s393Qyk0JUtz+2qVrTnJYJl+EVl4k7V8EN/SiY6+Zc4ApmBST1LBuUeXD236Dl7Nwfy6PfJr+evd9WmONMIgSgUAbblhmHgEGgNFw1pUjlvZwBWt0i7igZuRrUiyEefKCoGgyRNtyJoTOft3ddlNQxuyyhPhE1rk8N1I9mEBg5ZB2hnybh5tr1SdMYSx0HfXqbXvlOKlyDZl2ACA23nAXJH2cuT4uSSyhFs7Lye2EaFU3Lrkwbnfhk/C+LRcLxeDWKMtiORslGfPVmt5c/RumymNvzAA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR13MB3004.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(346002)(366004)(396003)(136003)(376002)(39840400004)(36756003)(186003)(66574015)(83380400001)(5660300002)(4326008)(44832011)(8936002)(2906002)(6916009)(54906003)(1076003)(107886003)(6506007)(316002)(2616005)(41300700001)(8676002)(66946007)(66476007)(66556008)(26005)(6512007)(52116002)(38100700002)(38350700002)(86362001)(6486002)(508600001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MkRLbm5hR0ptc1VzMXAyTlhaSHFKbnJqdlJrSjdkZWpQTG0wcEN1OUlxQUhn?= =?utf-8?B?TjRrMVBSUDF2cEFyN0tnbGJKR050Szk2UlZ2NExQblUrSnR3YjBDdVRkclpp?= =?utf-8?B?NjRvcG5va21xV29CbkRYKzdmRS9wNTF0L1pZdWUrWXNOcUFQdnlQMU5UYTZh?= =?utf-8?B?U25xQlYvb1ZJNE1hS2Nob3VHeHFxUjFYNUpxWjdWUVNwREsyd3QvdUpDejMz?= =?utf-8?B?OEp5NXRUNzJNZFkyRHdzUEZ2dmI0SDVvTHpjMVFYT0lHZFRiQnBjNUZRS3pI?= =?utf-8?B?SS9WTk41RXJ0NGdDdFl1R1p6d3QwZXZib3VBdFJNY29PaTkycUZYVDVwTjJq?= =?utf-8?B?L1hjQ1EwMDNGMXdtZE1WNzIwUm5qc2tBN3ZYdEVCdUZsaXQ0d0Z2Uk9vYU4w?= =?utf-8?B?ajhMaThUVmY4Q0hBbXhNYXRqRlpZeXUvVS8wY25pLzNIQy9BdEtScFVZczZz?= =?utf-8?B?SVpnT3JOVHU1ci90ZUo5T0xDbzd4VlhNVTh5V1RUdjYxMU9OcWxUa2pLUWFt?= =?utf-8?B?MmgxTEptNzhMdlhERm50OUpDVmhRakJiZ0kwT29QSVZyZnJCendxbkdUMUE3?= =?utf-8?B?NExKL3NLMC9JeUJaSHNFNHpHZUJocDVpWVRqTytBcStYUWpaT1J5RmRNS1Zl?= =?utf-8?B?YlcweGRra0FRV2kzODIxMjZpYU1JM25sZXR3cXYva3Q0ejlhZDRQd2VSL2hu?= =?utf-8?B?R1RIY2RuQnY0dXBBQlVKeDhTQkZ2RExFci8rZ1lOYTFHWWR3czM1MS9OeTVW?= =?utf-8?B?RE9IeHRXclpGKzVmdURjRXZOZzhDTmxXejNjYVFJR1VaWXE0Q2h2K3AzSDZp?= =?utf-8?B?cTBtWUhrYlNOL2UxUWJ1OUt3U0NYVGlzclVRWjQ0ZHN3YlczUzRGTTRBNDcx?= =?utf-8?B?Wi9XRWo3NHpLZVR0djdLb2ZBZ3pwRHdKVUUzZWFUanF0ODFwUEp3aDU3RUQr?= =?utf-8?B?OEd6Z2JSWWRpcGtBYjdSK1Q2NzJMbmpibnVWMEFMS3p2OEQ4dHUvVUtjazk5?= =?utf-8?B?dFpIVEkwMXpZVFRYT3hZSStYcUFUbllqNXM5K1ZHQ2ZXQkxDby9mbWd2RmhZ?= =?utf-8?B?elAyS1Y2a1NmalZWMDhYRGVJdkRXZXJqaXhaMG9DZ2M0NlY5SDF3ak14NG5B?= =?utf-8?B?Ukw2RXIvWGhZUjNLWEtPdU1ySS85VjVzRXBHcXNKRUFhWkhzZkM3TlZ4Tzgx?= =?utf-8?B?aVd0MjI1T3V4dWd0TzhZUjRkdVpOcmtIaFFCd1ZpZFVDOTBVUXBWbHRqYW9l?= =?utf-8?B?bWN0Z213VGFQWHh6cEx4RW1Sa21Od3QyQ0lmTWxrNEQyZnZIZ2RjS2g1RkRM?= =?utf-8?B?OW5SSDdoTThRUXZiMHhZNEZTQkkwOGc3S1pRZG9YN1dEbENyREhiOThFeXJn?= =?utf-8?B?eEprazhCeUtkeWFYQXZYUUUzZE9xeE9FUVEwNE4yTmJUSGE2c25UOTVZb1lM?= =?utf-8?B?MUNCd2NTdUVTcGdveUZmNzlTZ2xMM2h5ZkNSM3M0NldNcnI4SktQY2tXUzha?= =?utf-8?B?blhUNEVVQlUzNThlcFU0ZkcwWlE5cXZGOUNMbGwxNnVLK016REIwRnRIdXN2?= =?utf-8?B?azR4YmxRMUxTVkNpdWVrVkFhOER2V2xIV21OWG93WlRORXIzSTh4SnYzTUZC?= =?utf-8?B?ampiUTlPZGlXTCtCQ1dNMGVLRXF4M1N1aWZMUC9leGRJKy9iRDdDSWdRUDF5?= =?utf-8?B?dEZadkZyZkgrZXcvNFZnNmZ4Q0JJbFBxL2RvaHlkVFdpMEdFazNwZktZUlJD?= =?utf-8?B?dHV2ZkNzaVhQekQzSE9MVFJMNmZDbnNqVGZYQnlvR3g4VUZOTTQ1d0R4eU5s?= =?utf-8?B?STRSNExWenBJaUJrcmprRUk0cWM4WjdZZWZwNTJPWTVxcS93NGlDZUk3OER5?= =?utf-8?B?WjhPUE9oSmg5MEh4N2d4S1c5WjI2NE1nNTlocnJKVEx2UmZyZnF5VFpzb2oy?= =?utf-8?B?ZDczZ0dQWDFkbXBveDE2dTFSMnFvUGV6ellPNm9GeUN1cEY0TERydEpTZjhm?= =?utf-8?B?Z1J5Nm1QRjNpNjhLVzlnOHBIK1pxSTE4VDRveHpzdVZtNUswblRUT01nQTQz?= =?utf-8?B?ZnpTVVNlZ1FaK0Q0UTVhempBcnlleS9NeFBMYVRFSGMzZGxIcE16RmNpRStH?= =?utf-8?B?R2pOZFlVbjYrVEVObU40cytHdjVkM0NSMnhqQlpxSnpkMkdGMnpLblhsbnEz?= =?utf-8?B?NlN5T3M2L3lSN2Q0RHZUZGc5Z0ZVeFpBM2U0cXJya3RYd1BXY29hbnd0WUhG?= =?utf-8?B?MzNQVE15YitacTQ1b3RBTllVa3hhaDBzSVJJbUJodnB2MWQ3YzRERytJczRK?= =?utf-8?B?Nk1oMVRLeGF1eGhRcllGN1lKRngzUVBFekl3L1FscGhGRExPTDdhQT09?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: d6d00f54-7362-44cb-d2eb-08da443ae83f X-MS-Exchange-CrossTenant-AuthSource: DM6PR13MB3004.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2022 01:55:02.4291 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yW8TegUD0TZLgDJi8Q2M3eHTRhdtqquCv9Ja0GiXK17bWwtObRujIXEnmqTtBPW/ZbCK57GnpcBZ1kk4Up62yw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR13MB5858 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Implement NIC stop and close function for NFDK firmware. Signed-off-by: Jin Liu Signed-off-by: Diana Wang Signed-off-by: Peng Zhang Signed-off-by: Chaoyong He Signed-off-by: Niklas Söderlund --- drivers/net/nfp/nfp_ethdev.c | 92 ++++++++++++++++++++++++++++++++- drivers/net/nfp/nfp_ethdev_vf.c | 64 +++++++++++++++++++++-- 2 files changed, 151 insertions(+), 5 deletions(-) diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index 0a5c703190..4e3a6a964d 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -309,6 +309,94 @@ nfp_net_nfd3_close(struct rte_eth_dev *dev) return 0; } +static int +nfp_net_nfdk_stop(struct rte_eth_dev *dev) +{ + struct nfp_net_hw *hw; + + PMD_INIT_LOG(DEBUG, "Stop"); + + hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); + + nfp_net_disable_queues(dev); + + /* Clear queues */ + nfp_net_nfdk_stop_tx_queue(dev); + + nfp_net_stop_rx_queue(dev); + + if (rte_eal_process_type() == RTE_PROC_PRIMARY) + /* Configure the physical port down */ + nfp_eth_set_configured(hw->cpp, hw->nfp_idx, 0); + else + nfp_eth_set_configured(dev->process_private, hw->nfp_idx, 0); + + return 0; +} + +static int +nfp_net_nfdk_close(struct rte_eth_dev *dev) +{ + int i; + struct nfp_net_hw *hw; + struct rte_pci_device *pci_dev; + struct nfp_pf_dev *pf_dev; + + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + PMD_INIT_LOG(DEBUG, "Close"); + + pf_dev = NFP_NET_DEV_PRIVATE_TO_PF(dev->data->dev_private); + hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); + pci_dev = RTE_ETH_DEV_TO_PCI(dev); + + /* + * We assume that the DPDK application is stopping all the + * threads/queues before calling the device close function. + */ + + nfp_net_disable_queues(dev); + + /* Clear queues */ + nfp_net_nfdk_close_tx_queue(dev); + + nfp_net_close_rx_queue(dev); + + /* Cancel possible impending LSC work here before releasing the port*/ + rte_eal_alarm_cancel(nfp_net_dev_interrupt_delayed_handler, (void *)dev); + + /* Only free PF resources after all physical ports have been closed */ + /* Mark this port as unused and free device priv resources*/ + nn_cfg_writeb(hw, NFP_NET_CFG_LSC, 0xff); + pf_dev->ports[hw->idx] = NULL; + rte_eth_dev_release_port(dev); + + for (i = 0; i < pf_dev->total_phyports; i++) { + /* Check to see if ports are still in use */ + if (pf_dev->ports[i]) + return 0; + } + + /* Now it is safe to free all PF resources */ + PMD_INIT_LOG(INFO, "Freeing PF resources"); + nfp_cpp_area_free(pf_dev->ctrl_area); + nfp_cpp_area_free(pf_dev->hwqueues_area); + free(pf_dev->hwinfo); + free(pf_dev->sym_tbl); + nfp_cpp_free(pf_dev->cpp); + rte_free(pf_dev); + + rte_intr_disable(pci_dev->intr_handle); + + /* unregister callback func from eal lib */ + rte_intr_callback_unregister(pci_dev->intr_handle, + nfp_net_dev_interrupt_handler, + (void *)dev); + + return 0; +} + /* Initialise and register driver with DPDK Application */ static const struct eth_dev_ops nfp_net_nfd3_eth_dev_ops = { .dev_configure = nfp_net_configure, @@ -342,10 +430,10 @@ static const struct eth_dev_ops nfp_net_nfd3_eth_dev_ops = { static const struct eth_dev_ops nfp_net_nfdk_eth_dev_ops = { .dev_configure = nfp_net_configure, .dev_start = nfp_net_start, - .dev_stop = nfp_net_nfd3_stop, + .dev_stop = nfp_net_nfdk_stop, .dev_set_link_up = nfp_net_set_link_up, .dev_set_link_down = nfp_net_set_link_down, - .dev_close = nfp_net_nfd3_close, + .dev_close = nfp_net_nfdk_close, .promiscuous_enable = nfp_net_promisc_enable, .promiscuous_disable = nfp_net_promisc_disable, .link_update = nfp_net_link_update, diff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c index d347c98134..a5c6aceb32 100644 --- a/drivers/net/nfp/nfp_ethdev_vf.c +++ b/drivers/net/nfp/nfp_ethdev_vf.c @@ -214,6 +214,58 @@ nfp_netvf_nfd3_close(struct rte_eth_dev *dev) return 0; } +static int +nfp_netvf_nfdk_stop(struct rte_eth_dev *dev) +{ + PMD_INIT_LOG(DEBUG, "Stop"); + + nfp_net_disable_queues(dev); + + /* Clear queues */ + nfp_net_nfdk_stop_tx_queue(dev); + + nfp_net_stop_rx_queue(dev); + + return 0; +} + +static int +nfp_netvf_nfdk_close(struct rte_eth_dev *dev) +{ + struct rte_pci_device *pci_dev; + + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + PMD_INIT_LOG(DEBUG, "Close"); + + pci_dev = RTE_ETH_DEV_TO_PCI(dev); + + /* + * We assume that the DPDK application is stopping all the + * threads/queues before calling the device close function. + */ + + nfp_net_disable_queues(dev); + + /* Clear queues */ + nfp_net_nfdk_close_tx_queue(dev); + + nfp_net_close_rx_queue(dev); + + rte_intr_disable(pci_dev->intr_handle); + + /* unregister callback func from eal lib */ + rte_intr_callback_unregister(pci_dev->intr_handle, + nfp_net_dev_interrupt_handler, + (void *)dev); + + /* Cancel possible impending LSC work here before releasing the port*/ + rte_eal_alarm_cancel(nfp_net_dev_interrupt_delayed_handler, (void *)dev); + + return 0; +} + /* Initialise and register VF driver with DPDK Application */ static const struct eth_dev_ops nfp_netvf_nfd3_eth_dev_ops = { .dev_configure = nfp_net_configure, @@ -247,10 +299,10 @@ static const struct eth_dev_ops nfp_netvf_nfd3_eth_dev_ops = { static const struct eth_dev_ops nfp_netvf_nfdk_eth_dev_ops = { .dev_configure = nfp_net_configure, .dev_start = nfp_netvf_start, - .dev_stop = nfp_netvf_nfd3_stop, + .dev_stop = nfp_netvf_nfdk_stop, .dev_set_link_up = nfp_netvf_set_link_up, .dev_set_link_down = nfp_netvf_set_link_down, - .dev_close = nfp_netvf_nfd3_close, + .dev_close = nfp_netvf_nfdk_close, .promiscuous_enable = nfp_net_promisc_enable, .promiscuous_disable = nfp_net_promisc_disable, .link_update = nfp_net_link_update, @@ -498,7 +550,13 @@ static const struct rte_pci_id pci_id_nfp_vf_net_map[] = { static int nfp_vf_pci_uninit(struct rte_eth_dev *eth_dev) { /* VF cleanup, just free private port data */ - return nfp_netvf_nfd3_close(eth_dev); + struct nfp_net_hw *hw; + + hw = NFP_NET_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); + if (NFD_CFG_CLASS_VER_of(hw->ver) == NFP_NET_CFG_VERSION_DP_NFD3) + return nfp_netvf_nfd3_close(eth_dev); + else + return nfp_netvf_nfdk_close(eth_dev); } static int eth_nfp_vf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, -- 2.27.0