Skip to content

Commit

Permalink
bus/pci: add Mellanox kernel driver type
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
yskoh-mellanox authored and tmonjalo committed Jun 3, 2019
1 parent ffadd93 commit 0cb8651
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 1 deletion.
6 changes: 5 additions & 1 deletion drivers/bus/pci/linux/pci.c
Expand Up @@ -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
Expand Down Expand Up @@ -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;
}
Expand Down
1 change: 1 addition & 0 deletions lib/librte_eal/common/include/rte_dev.h
Expand Up @@ -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,
};

Expand Down

0 comments on commit 0cb8651

Please sign in to comment.