[dpdk-dev] [PATCH] bus/pci: fix Windows kernel driver categories

Thomas Monjalon thomas at monjalon.net
Thu Mar 18 08:49:07 CET 2021


18/03/2021 00:17, Ranjit Menon:
> Hi Thomas,
> 
> On 3/16/2021 4:11 PM, Thomas Monjalon wrote:
> > In Windows probing, the value RTE_PCI_KDRV_NONE was used
> > instead of RTE_PCI_KDRV_UNKNOWN (mlx case),
> > and RTE_PCI_KDRV_NIC_UIO (FreeBSD) was re-used
> > instead of having a new RTE_PCI_KDRV_NET_UIO for Windows NetUIO.
> Shouldn't the mlx case actually remain RTE_PCI_KDRV_NONE?
> 
> mlx does not require a UIO-like kernel driver...No? And NONE implies that no kernel driver is used/required.
> Not sure what is correct here.

No this is a bifurcated model, meaning kernel and userland
work together. The PCI device is bound to the kernel driver,
but the driver is not listed because no special treatment is required.

> > While adding the new value RTE_PCI_KDRV_NET_UIO,
> > 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 at dpdk.org
> >
> > Signed-off-by: Thomas Monjalon <thomas at monjalon.net>
> > ---
> >   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..3d009cc74b 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,  /* not listed - may be a bifurcated driver */
> > +	RTE_PCI_KDRV_IGB_UIO,      /* igb_uio for Linux */
> > +	RTE_PCI_KDRV_VFIO,         /* VFIO for Linux */
> > +	RTE_PCI_KDRV_UIO_GENERIC,  /* uio_generic for Linux */
> > +	RTE_PCI_KDRV_NIC_UIO,      /* nic_uio for FreeBSD */
> > +	RTE_PCI_KDRV_NONE,         /* error */
> > +	RTE_PCI_KDRV_NET_UIO,      /* NetUIO for Windows */
> >   };
> >   
> 
> Any chance we can re-order the enums, so that _NONE and _UNKNOWN are at 
> the top?

No, it would break the ABI.

> This will change the value, and break code where this value was 
> hard-coded. But how likely is that...?

The problem is when loading the new PCI bus driver with an old device driver.





More information about the dev mailing list