From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <stable-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by dpdk.space (Postfix) with ESMTP id BB159A0AC5
	for <public@inbox.dpdk.org>; Thu,  2 May 2019 11:08:03 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 73E682C4F;
	Thu,  2 May 2019 11:08:03 +0200 (CEST)
Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])
 by dpdk.org (Postfix) with ESMTP id EA69B2BC1
 for <stable@dpdk.org>; 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 <yskoh@mellanox.com>
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-stable] [PATCH v3 1/2] bus/pci: add Mellanox kernel driver
	type
X-BeenThere: stable@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches for DPDK stable branches <stable.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/stable>,
 <mailto:stable-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/stable/>
List-Post: <mailto:stable@dpdk.org>
List-Help: <mailto:stable-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/stable>,
 <mailto:stable-request@dpdk.org?subject=subscribe>
Errors-To: stable-bounces@dpdk.org
Sender: "stable" <stable-bounces@dpdk.org>

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 <yskoh@mellanox.com>
---

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,
 };
 
-- 
2.11.0