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 8F019429F1 for ; Thu, 27 Apr 2023 04:18:46 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8553640F18; Thu, 27 Apr 2023 04:18:46 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id 303D240E0F; Thu, 27 Apr 2023 04:18:44 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1004) id 385E121C33CF; Wed, 26 Apr 2023 19:18:43 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 385E121C33CF DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxonhyperv.com; s=default; t=1682561923; bh=kGnD60hbO0ifi1hapzzVp5R9EDU5S229vK+P4hYkhFo=; h=From:To:Cc:Subject:Date:From; b=NHX6tQ+3lJ8+AnR7UMi/dJGjzbfboiWTBMExvk8QakEtG2Kuti6GeeQyrY4hAGHKT Qw8enqMb99VAJZNRvILUmxVsHHqKu6wKqgreSEKXMunt1F/qGcqu8PN/ut6QmrTXlo bhcPXOGINqWpJ33feHF3NURoPfDrzubn67L9jERE= From: longli@linuxonhyperv.com To: Ferruh Yigit Cc: dev@dpdk.org, Ajay Sharma , Long Li , stable@dpdk.org Subject: [PATCH] net/mana: return probe failure if there is no device found Date: Wed, 26 Apr 2023 19:18:35 -0700 Message-Id: <1682561915-7204-1-git-send-email-longli@linuxonhyperv.com> X-Mailer: git-send-email 1.8.3.1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org From: Long Li When there is no device found on this PCI device, return probe failure and release allocated resources for this PCI device. Fixes: 517ed6e2d5 ("net/mana: add basic driver with build environment") Cc: stable@dpdk.org Signed-off-by: Long Li --- drivers/net/mana/mana.c | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/drivers/net/mana/mana.c b/drivers/net/mana/mana.c index 2463f34c1e..90d083aae7 100644 --- a/drivers/net/mana/mana.c +++ b/drivers/net/mana/mana.c @@ -1343,6 +1343,7 @@ mana_probe_port(struct ibv_device *ibdev, struct ibv_device_attr_ex *dev_attr, /* * Goes through the IB device list to look for the IB port matching the * mac_addr. If found, create a rte_eth_dev for it. + * Return value: number of successfully probed deivces */ static int mana_pci_probe_mac(struct rte_pci_device *pci_dev, @@ -1352,8 +1353,9 @@ mana_pci_probe_mac(struct rte_pci_device *pci_dev, int ibv_idx; struct ibv_context *ctx; int num_devices; - int ret = 0; + int ret; uint8_t port; + int count = 0; ibv_list = ibv_get_device_list(&num_devices); for (ibv_idx = 0; ibv_idx < num_devices; ibv_idx++) { @@ -1383,6 +1385,12 @@ mana_pci_probe_mac(struct rte_pci_device *pci_dev, ret = ibv_query_device_ex(ctx, NULL, &dev_attr); ibv_close_device(ctx); + if (ret) { + DRV_LOG(ERR, "Failed to query IB device %s", + ibdev->name); + continue; + } + for (port = 1; port <= dev_attr.orig_attr.phys_port_cnt; port++) { struct rte_ether_addr addr; @@ -1394,15 +1402,17 @@ mana_pci_probe_mac(struct rte_pci_device *pci_dev, continue; ret = mana_probe_port(ibdev, &dev_attr, port, pci_dev, &addr); - if (ret) + if (ret) { DRV_LOG(ERR, "Probe on IB port %u failed %d", port, ret); - else + } else { + count++; DRV_LOG(INFO, "Successfully probed on IB port %u", port); + } } } ibv_free_device_list(ibv_list); - return ret; + return count; } /* @@ -1416,6 +1426,7 @@ mana_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct mana_conf conf = {0}; unsigned int i; int ret; + int count = 0; if (args && args->drv_str) { ret = mana_parse_args(args, &conf); @@ -1433,16 +1444,21 @@ mana_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, } /* If there are no driver parameters, probe on all ports */ - if (!conf.index) - return mana_pci_probe_mac(pci_dev, NULL); + if (conf.index) { + for (i = 0; i < conf.index; i++) + count += mana_pci_probe_mac(pci_dev, + &conf.mac_array[i]); + } else { + count = mana_pci_probe_mac(pci_dev, NULL); + } - for (i = 0; i < conf.index; i++) { - ret = mana_pci_probe_mac(pci_dev, &conf.mac_array[i]); - if (ret) - return ret; + if (!count) { + rte_memzone_free(mana_shared_mz); + mana_shared_mz = NULL; + ret = -ENODEV; } - return 0; + return ret; } static int @@ -1475,6 +1491,7 @@ mana_pci_remove(struct rte_pci_device *pci_dev) if (!mana_shared_data->primary_cnt) { DRV_LOG(DEBUG, "free shared memezone data"); rte_memzone_free(mana_shared_mz); + mana_shared_mz = NULL; } rte_spinlock_unlock(&mana_shared_data_lock); -- 2.32.0