From 41e026c1b3fd07ee6520e3d5d4ec0787d0dac300 Mon Sep 17 00:00:00 2001 From: Thomas Monjalon Date: Tue, 16 Mar 2021 23:09:38 +0100 Subject: [PATCH] bus/pci: fix Windows kernel driver categories In Windows probing, the value RTE_PCI_KDRV_NONE was used instead of RTE_PCI_KDRV_UNKNOWN. This value covers the mlx case where the kernel driver is in place, offering a bifurcated mode to the userspace driver. When the kernel driver is listed as unknown, there is no special treatment in DPDK probing, contrary to UIO modes. The value RTE_PCI_KDRV_NIC_UIO (FreeBSD) was re-used instead of having a new RTE_PCI_KDRV_NET_UIO for Windows NetUIO. While adding the new value RTE_PCI_KDRV_NET_UIO (at the end for ABI compatibility), the enum of kernel driver categories is annotated. Fixes: b762221ac24f ("bus/pci: support Windows with bifurcated drivers") Fixes: c76ec01b4591 ("bus/pci: support netuio on Windows") Cc: stable@dpdk.org Signed-off-by: Thomas Monjalon Acked-by: Dmitry Kozlyuk Acked-by: Tal Shnaiderman Acked-by: Ranjit Menon --- drivers/bus/pci/rte_bus_pci.h | 13 +++++++------ drivers/bus/pci/windows/pci.c | 14 +++++++------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h index fdda046515..876abddefb 100644 --- a/drivers/bus/pci/rte_bus_pci.h +++ b/drivers/bus/pci/rte_bus_pci.h @@ -52,12 +52,13 @@ TAILQ_HEAD(rte_pci_driver_list, rte_pci_driver); struct rte_devargs; enum rte_pci_kernel_driver { - RTE_PCI_KDRV_UNKNOWN = 0, - RTE_PCI_KDRV_IGB_UIO, - RTE_PCI_KDRV_VFIO, - RTE_PCI_KDRV_UIO_GENERIC, - RTE_PCI_KDRV_NIC_UIO, - RTE_PCI_KDRV_NONE, + RTE_PCI_KDRV_UNKNOWN = 0, /* may be misc UIO or bifurcated driver */ + RTE_PCI_KDRV_IGB_UIO, /* igb_uio for Linux */ + RTE_PCI_KDRV_VFIO, /* VFIO for Linux */ + RTE_PCI_KDRV_UIO_GENERIC, /* uio_pci_generic for Linux */ + RTE_PCI_KDRV_NIC_UIO, /* nic_uio for FreeBSD */ + RTE_PCI_KDRV_NONE, /* no attached driver */ + RTE_PCI_KDRV_NET_UIO, /* NetUIO for Windows */ }; /** diff --git a/drivers/bus/pci/windows/pci.c b/drivers/bus/pci/windows/pci.c index 8f906097f4..d39a7748b8 100644 --- a/drivers/bus/pci/windows/pci.c +++ b/drivers/bus/pci/windows/pci.c @@ -38,7 +38,7 @@ rte_pci_map_device(struct rte_pci_device *dev) * Devices that are bound to netuio are mapped at * the bus probing stage. */ - if (dev->kdrv == RTE_PCI_KDRV_NIC_UIO) + if (dev->kdrv == RTE_PCI_KDRV_NET_UIO) return 0; else return -1; @@ -207,14 +207,14 @@ get_device_resource_info(HDEVINFO dev_info, int ret; switch (dev->kdrv) { - case RTE_PCI_KDRV_NONE: - /* mem_resource - Unneeded for RTE_PCI_KDRV_NONE */ + case RTE_PCI_KDRV_UNKNOWN: + /* bifurcated driver case - mem_resource is unneeded */ dev->mem_resource[0].phys_addr = 0; dev->mem_resource[0].len = 0; dev->mem_resource[0].addr = NULL; break; - case RTE_PCI_KDRV_NIC_UIO: - /* get device info from netuio kernel driver */ + case RTE_PCI_KDRV_NET_UIO: + /* get device info from NetUIO kernel driver */ ret = get_netuio_device_info(dev_info, dev_info_data, dev); if (ret != 0) { RTE_LOG(DEBUG, EAL, @@ -323,9 +323,9 @@ set_kernel_driver_type(PSP_DEVINFO_DATA device_info_data, { /* set kernel driver type based on device class */ if (IsEqualGUID(&(device_info_data->ClassGuid), &GUID_DEVCLASS_NETUIO)) - dev->kdrv = RTE_PCI_KDRV_NIC_UIO; + dev->kdrv = RTE_PCI_KDRV_NET_UIO; else - dev->kdrv = RTE_PCI_KDRV_NONE; + dev->kdrv = RTE_PCI_KDRV_UNKNOWN; } static int -- 2.20.1