On Thu, 15 Dec 2016 12:19:44 +0530 Shreyansh Jain <shreyansh.j...@nxp.com> wrote:
> > @@ -1866,7 +1871,11 @@ typedef int (*eth_dev_uninit_t)(struct rte_eth_dev > > *eth_dev); > > * - The size of the private data to allocate for each matching device. > > */ > > struct eth_driver { > > - struct rte_pci_driver pci_drv; /**< The PMD is also a PCI driver. */ > > + union { > > + struct rte_pci_driver pci_drv; /**< The PMD PCI driver. */ > > + struct rte_vmbus_driver vmbus_drv;/**< The PMD VMBUS drv. */ > > + }; > > + > > eth_dev_init_t eth_dev_init; /**< Device init function. */ > > eth_dev_uninit_t eth_dev_uninit; /**< Device uninit function. */ > > unsigned int dev_private_size; /**< Size of device private data. */ > > It is not a scale-able model where we have to change eth_driver/eth_dev > for every new device type, other than PCI. Maybe VMBus is _very_ close > to PCI so no changes are required in PCI layer (common, linuxapp, > bsdapp) - but, for others it won't stop there. > > At the least, rte_pci_driver/rte_pci_device should be removed from > eth_driver & rte_eth_dev, respectively - relying on rte_driver and > rte_device. > > This is the primary reason work on the SoC patchset and now the new Bus > model is being done. Agreed. the better long term model is to use C style inheritance where rte_pci_driver has eth_driver inside. The other alternative is to make the second element an opaque pointer. But that was too big a change, and not necessary to get VMBUS to work. Longer term refactoring will take more effort. Go ahead and address it with a better bus model, but that probably isn't going to be ready for a couple of releases.