[dpdk-dev] [RFC PATCH 0/6] remove pci driver from vdevs

Neil Horman nhorman at tuxdriver.com
Tue Sep 1 21:18:42 CEST 2015


On Tue, Sep 01, 2015 at 01:38:02PM +0000, Iremonger, Bernard wrote:
> Hi Neil, Thomas,
> 
> <snip>
> 
> > > You didn't remove the relationship of the ethdev to the pci driver
> > > though, which is really the problem, An ethdev may reside on any
> > > number of bus types (pci/usb/vmbus/virt/none). 
>  
> <snip>
> 
> > >  Whats really needed is a way to associate an ethdev with an arbitrary bus
> 
> <snip>
> 
> > > > Please see email below from 6Wind
> > > >
> > > > http://dpdk.org/ml/archives/dev/2015-July/022107.html
> > > >
> > > I think you misread that.  I think all Thomas is asking for (correct
> > > me if I'm wrong Thomas), is for someone to start refactoring the
> > > ethdev registration code so that we can have a single init path
> > > without the need for wierd typing and differentiation at init time.
> 
> <snip >
> 
> > >  We just need to
> > > start thinking about how to make bus registration independent of
> > > ethernet device registration, and while your patch series sort of
> > > eliminates some of that, its really not a proper refactoring of the
> > > sort I think Thomas is asking for.
> 
> I am just trying to distill what the actual requirement is from the above discussion.
> 
> (1) Remove relationship of the ethdev to the pci driver.
Correct

> (2) Refactor ethdev registration code so that there is a single init  path.
Correct (or mostly correct, in rereading my initial post, there may be some
ambiguitiy here)

> (3) Make bus registration independent of ethdev registration.
Correct

> (4) Change all (17) PMD's to use the  modified structures.
> 
Correct (I assume the 17 number is accurate here)

> The rte_eal_driver_registration() code is  in librte_eal,  untouched as yet by this patch set.
> 
Correct, the code that registers an init function is a single path, which is
great.  However, that path requires that you specify a device type (in this case
PMD_PDEV or PMD_VDEV to differentiate pci vs virtual devices (it uses this for
ordering of initalization in rte_eal_dev_init, which is a hack).  What would be
preferred would be if the structure that was registered via that macro only held
a name and an init routine to initalize the driver itself. Inside that init
routine, the driver would then be responsible for registering with the
appropriate bus type (virtual/pci/usb/whatever).  A secondary function would be
registered as part of that process (akin to the linux/bsd probe() method) which
was called once for each instance of the device found on that bus.

> The rte_eth_driver_registration() code is in librte_ether.
> Should the pci fields be removed from the struct rte_eth_dev{} and struct eth_driver{},
IMO, yes, they should, as the driver can store pointers to those devices in
their private per-device data area.  That said, there may be value in including
a union of all bus types in the ethdev itself, if there are higher layer
functions that need to be aware of a given ethdevs bus type

> and put somewhere else or replaced with a union of bus  types and drivers?
> 
> Regards,
> 
> Bernard.
> 
> 
> 


More information about the dev mailing list