From patchwork Thu May 2 09:07:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongseok Koh X-Patchwork-Id: 53205 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8E3212BC1; Thu, 2 May 2019 11:08:01 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id E64232BB1 for ; Thu, 2 May 2019 11:07:59 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE2 (envelope-from yskoh@mellanox.com) with ESMTPS (AES256-SHA encrypted); 2 May 2019 12:07:59 +0300 Received: from scfae-sc-2.mti.labs.mlnx (scfae-sc-2.mti.labs.mlnx [10.101.0.96]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x4297uTL014107; Thu, 2 May 2019 12:07:57 +0300 From: Yongseok Koh To: ferruh.yigit@intel.com, anatoly.burakov@intel.com, thomas@monjalon.net, shahafs@mellanox.com Cc: dev@dpdk.org, stable@dpdk.org Date: Thu, 2 May 2019 02:07:53 -0700 Message-Id: <20190502090754.36154-1-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190502014436.40545-1-yskoh@mellanox.com> References: <20190502014436.40545-1-yskoh@mellanox.com> Subject: [dpdk-dev] [PATCH v3 1/2] bus/pci: add Mellanox kernel driver type 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" When checking RTE_PCI_DRV_IOVA_AS_VA flag to determine IOVA mode, pci_one_device_has_iova_va() returns true only if kernel driver of the device is vfio. However, Mellanox mlx4/5 PMD doesn't need to be detached from kernel driver and attached to VFIO/UIO. Control path still goes through the existing kernel driver, which is mlx4_core/mlx5_core. In order to make RTE_PCI_DRV_IOVA_AS_VA effective for mlx4/mlx5 PMD, a new kernel driver type has to be introduced. Cc: stable@dpdk.org Signed-off-by: Yongseok Koh --- v3: * make commit log more explanatory v2: * add RTE_KDRV_NIC_MLX drivers/bus/pci/linux/pci.c | 6 +++++- lib/librte_eal/common/include/rte_dev.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c index c99d523f0a..b931cf9d10 100644 --- a/drivers/bus/pci/linux/pci.c +++ b/drivers/bus/pci/linux/pci.c @@ -329,6 +329,9 @@ pci_scan_one(const char *dirname, const struct rte_pci_addr *addr) dev->kdrv = RTE_KDRV_IGB_UIO; else if (!strcmp(driver, "uio_pci_generic")) dev->kdrv = RTE_KDRV_UIO_GENERIC; + else if (!strcmp(driver, "mlx4_core") || + !strcmp(driver, "mlx5_core")) + dev->kdrv = RTE_KDRV_NIC_MLX; else dev->kdrv = RTE_KDRV_UNKNOWN; } else @@ -568,7 +571,8 @@ pci_one_device_has_iova_va(void) FOREACH_DRIVER_ON_PCIBUS(drv) { if (drv && drv->drv_flags & RTE_PCI_DRV_IOVA_AS_VA) { FOREACH_DEVICE_ON_PCIBUS(dev) { - if (dev->kdrv == RTE_KDRV_VFIO && + if ((dev->kdrv == RTE_KDRV_VFIO || + dev->kdrv == RTE_KDRV_NIC_MLX) && rte_pci_match(drv, dev)) return 1; } diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h index 56dd52ad9e..a17023d88b 100644 --- a/lib/librte_eal/common/include/rte_dev.h +++ b/lib/librte_eal/common/include/rte_dev.h @@ -63,6 +63,7 @@ enum rte_kernel_driver { RTE_KDRV_VFIO, RTE_KDRV_UIO_GENERIC, RTE_KDRV_NIC_UIO, + RTE_KDRV_NIC_MLX, RTE_KDRV_NONE, };