From patchwork Mon Mar 1 06:52:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Khoa To X-Patchwork-Id: 88294 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1F969A055D; Mon, 1 Mar 2021 07:52:51 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9236740684; Mon, 1 Mar 2021 07:52:50 +0100 (CET) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id 671DC4014E for ; Mon, 1 Mar 2021 07:52:49 +0100 (CET) Received: from khot-dev.ntdev.corp.microsoft.com (unknown [131.107.160.25]) by linux.microsoft.com (Postfix) with ESMTPSA id 78F0D20B57A1; Sun, 28 Feb 2021 22:52:48 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 78F0D20B57A1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1614581568; bh=NkVqaNvq2x1xcNsi1IxTwhFu4gNRwg/ee/DOWnR/GCQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=B6TO+BnSf3ZBtS2Z8yx3yKHPvgu4uMerVRcjxHT0SdPKQkTljcK+4400Jt+s1x99i pCJShbJw3XUpDuv0qeuN3m3Yq67o7MD80IieOECjsoEaW8RMzPKgdsJOdBfkXzoeJY opi46Wfv+OtTFlbQ7KnTx/HLPCBFoyN8eyiF6xA0= From: Khoa To To: dev@dpdk.org Cc: dmitry.kozliuk@gmail.com, pallavi.kadam@intel.com Date: Sun, 28 Feb 2021 22:52:41 -0800 Message-Id: <20210301065241.237-1-khot@linux.microsoft.com> X-Mailer: git-send-email 2.29.0.vfs.0.0 In-Reply-To: <20210301062208.1904-1-khot@linux.microsoft.com> References: <20210301062208.1904-1-khot@linux.microsoft.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4] bus/pci/windows: support for PCI scan allowed and blocked lists 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 Sender: "dev" EAL -a and -b options are used to specify which PCI devices are explicitly allowed or blocked during PCI bus scan. This evaluation is missing in the Windows implementation of rte_pci_scan. This patch provides this missing functionality, so that apps can specify which NetUIO devices to ignore during PCI bus scan. Signed-off-by: Khoa To Acked-by: Ranjit Menon Acked-by: Dmitry Kozlyuk --- v4: * Fix coding style warning with unaligned comments v3: * Move the check inside pci_scan_one * Small change to pci_scan_one to malloc only after checks succeeded v2: * Truncate commit description lines to 75 charaters or less drivers/bus/pci/windows/pci.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/drivers/bus/pci/windows/pci.c b/drivers/bus/pci/windows/pci.c index f66258452..0d184f24d 100644 --- a/drivers/bus/pci/windows/pci.c +++ b/drivers/bus/pci/windows/pci.c @@ -308,17 +308,24 @@ set_kernel_driver_type(PSP_DEVINFO_DATA device_info_data, static int pci_scan_one(HDEVINFO dev_info, PSP_DEVINFO_DATA device_info_data) { - struct rte_pci_device *dev; + struct rte_pci_device *dev = NULL; int ret = -1; char pci_device_info[REGSTR_VAL_MAX_HCID_LEN]; struct rte_pci_addr addr; struct rte_pci_id pci_id; - dev = malloc(sizeof(*dev)); - if (dev == NULL) + ret = get_device_pci_address(dev_info, device_info_data, &addr); + if (ret != 0) goto end; - memset(dev, 0, sizeof(*dev)); + if (rte_pci_ignore_device(&addr)) { + /* + * We won't add this device, but we want to continue + * looking for supported devices + */ + ret = ERROR_CONTINUE; + goto end; + } ret = get_pci_hardware_id(dev_info, device_info_data, pci_device_info, sizeof(pci_device_info)); @@ -335,10 +342,12 @@ pci_scan_one(HDEVINFO dev_info, PSP_DEVINFO_DATA device_info_data) goto end; } - ret = get_device_pci_address(dev_info, device_info_data, &addr); - if (ret != 0) + dev = malloc(sizeof(*dev)); + if (dev == NULL) goto end; + memset(dev, 0, sizeof(*dev)); + dev->addr = addr; dev->id = pci_id; dev->max_vfs = 0; /* TODO: get max_vfs */ @@ -417,7 +426,7 @@ rte_pci_scan(void) device_index++; /* we only want to enumerate net & netuio class devices */ if (IsEqualGUID(&(device_info_data.ClassGuid), - &GUID_DEVCLASS_NET) || + &GUID_DEVCLASS_NET) || IsEqualGUID(&(device_info_data.ClassGuid), &GUID_DEVCLASS_NETUIO)) { ret = pci_scan_one(dev_info, &device_info_data);