[v2,1/2] bus/pci: add Mellanox kernel driver type
Checks
Commit Message
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
drivers, which is mlx4_core/mlx5_core.
Cc: stable@dpdk.org
Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
---
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(-)
Comments
02/05/2019 09:43, Yongseok Koh:
> 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
> drivers, which is mlx4_core/mlx5_core.
The real change here is to handle RTE_PCI_DRV_IOVA_AS_VA
with Mellanox kernel drivers.
It think it should be explained in the commit log,
because there is no other reason for not using RTE_KDRV_UNKNOWN.
> @@ -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;
> }
@@ -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;
}
@@ -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,
};