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 <thomas@monjalon.net>
Acked-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
Acked-by: Tal Shnaiderman <talshn@nvidia.com>
Acked-by: Ranjit Menon <ranjit.menon@intel.com>
This commit is contained in:
Thomas Monjalon 2021-03-16 23:09:38 +01:00
parent be2e6d7895
commit 41e026c1b3
2 changed files with 14 additions and 13 deletions

View File

@ -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 */
};
/**

View File

@ -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