[dpdk-dev] [PATCH 05/40] net/virtio: move PCI device init in dedicated file
David Marchand
david.marchand at redhat.com
Thu Jan 14 17:14:32 CET 2021
On Thu, Jan 14, 2021 at 5:04 PM Maxime Coquelin
<maxime.coquelin at redhat.com> wrote:
> On 1/5/21 10:19 PM, David Marchand wrote:
> >> static bool
> >> rx_offload_enabled(struct virtio_hw *hw)
> >> @@ -2521,7 +2419,7 @@ static void virtio_dev_free_mbufs(struct rte_eth_dev *dev)
> >> /*
> >> * Stop device: disable interrupt and mark link down
> >> */
> >> -static int
> >> +int
> >> virtio_dev_stop(struct rte_eth_dev *dev)
> >> {
> >> struct virtio_hw *hw = dev->data->dev_private;
> >> @@ -2673,7 +2571,5 @@ __rte_unused uint8_t is_rx)
> >> }
> >>
> >> RTE_PMD_EXPORT_NAME(net_virtio, __COUNTER__);
> >
> > This belongs with the rest of the pci driver declarations.
> >
> > $ ./usertools/dpdk-pmdinfo.py
> > $HOME/builds/build-gcc-shared/drivers/librte_net_virtio.so
> > PMD NAME: net_virtio_user
> > PMD PARAMETERS: path=<path> mac=<mac addr> cq=<int> queue_size=<int>
> > queues=<int> iface=<string> server=<0|1> mrg_rxbuf=<0|1>
> > in_order=<0|1> packed_vq=<0|1> speed=<int> vectorized=<0|1>
> >
> > PMD NAME: net_virtio
> >
> > ^^^
> > Here, I would expect the pci table and the kmod dependencies.
> >
> >
> > This makes me realise that the net_virtio_user driver is not exported
> > (but it seems to work without it.. interesting).
>
> As discussed offlist, I have moved RTE_PMD_EXPORT_NAME to
> virtio_pci_ethdev.c, and I now get expected output:
Some details, if someone is interested:
In the pci driver case, we can't rely on the pci bus register macro
because of the custom constructor, hence the manual call to
RTE_PMD_EXPORT_NAME.
For the virtio_user driver, the vdev bus register macro actually
exports the driver and this is why it works fine.
>
> $ ./usertools/dpdk-pmdinfo.py build/drivers/librte_net_virtio.so
> PMD NAME: net_virtio_user
> PMD PARAMETERS: path=<path> mac=<mac addr> cq=<int> queue_size=<int>
> queues=<int> iface=<string> server=<0|1> mrg_rxbuf=<0|1> in_order=<0|1>
> packed_vq=<0|1> speed=<int> vectorized=<0|1>
>
> PMD NAME: net_virtio
> PMD KMOD DEPENDENCIES: * igb_uio | uio_pci_generic | vfio-pci
> PMD HW SUPPORT:
> Red Hat, Inc. (1af4) : Virtio network device (1000) (All Subdevices)
> Red Hat, Inc. (1af4) : Virtio network device (1041) (All Subdevices)
[snip]
> >> +static int eth_virtio_pci_remove(struct rte_pci_device *pci_dev)
> >> +{
> >> + int ret;
> >> +
> >> + ret = rte_eth_dev_pci_generic_remove(pci_dev, eth_virtio_pci_uninit);
> >> + /* Port has already been released by close. */
> >> + if (ret == -ENODEV)
> >> + ret = 0;
> >> + return ret;
> >> +}
> >> +
> >> +static struct rte_pci_driver rte_virtio_pmd = {
> >
> > This seems too generic.
> >
> > virtio_pci_pmd ?
>
> virtio_net_pci_pmd is even better.
>
> >
> >> + .driver = {
> >> + .name = "net_virtio",
>
> I keept it as is here not to break tools relying on driver name.
> Makes sense?
Yes.
>
> >> + },
> >> + .id_table = pci_id_virtio_map,
> >> + .drv_flags = 0,
> >> + .probe = eth_virtio_pci_probe,
> >> + .remove = eth_virtio_pci_remove,
> >> +};
> >> +
> >> +RTE_INIT(rte_virtio_pmd_init)
> >
> > virtio_pci_pmd_init ?
> >
>
> rte_virtio_net_pci_pmd_init
Ok for me.
Thanks Maxime.
--
David Marchand
More information about the dev
mailing list