> > Sorry to self-reply. > > I think it's better the 'struct rte_eth_dev *dev' hold a pointer to the > 'struct rte_eth_fp_ops', e.g. > > struct rte_eth_dev { > struct rte_eth_fp_ops *fp_ops; > ... // other field > } > > The eth framework set the pointer in the rte_eth_dev_pci_allocate(), and > driver fill > corresponding callback: > dev->fp_ops->rx_pkt_burst = xxx_recv_pkts; > dev->fp_ops->tx_pkt_burst = xxx_xmit_pkts; > ... > > In this way, the behavior of the primary and secondary processes can be > unified, which > is basically the same as that of the original process.
I don't think it is a good thing to do, as it nullifies one of the main thing of this approach: fp_ops[] points to actual rx/tx functions and data only when PMD is really ready to do rx/tx (device is properly configured and started), in other cases it points to dummy stubs. As another drawback it will mean code changes in aach and every driver.