2014-02-28 18:25, Olivier Matz: > Instead of having a list of virtual device drivers in EAL code, add an > API to register drivers. Thanks to this change: > - we don't need to reference pmd_ring, pmd_pcap and pmd_xenvirt in EAL code > - it is now possible to provide a virtual device driver as a shared > library. > > The registration is done in an init function flaged with > __attribute__((constructor)). The new convention is to name this > function rte_pmd_xyz_init(). The per-device init function is renamed > rte_pmd_xyz_devinit(). > > By the way the internal PMDs are now also .so/standalone ready. Let's do > it later on. It will be required to ease maintenance. > > Signed-off-by: Olivier Matz <olivier.matz at 6wind.com>
> --- a/lib/librte_eal/linuxapp/eal/eal.c > +++ b/lib/librte_eal/linuxapp/eal/eal.c > @@ -1039,10 +1039,8 @@ rte_eal_init(int argc, char **argv) > > rte_eal_mcfg_complete(); > > - if (rte_eal_vdev_init() < 0) > - rte_panic("Cannot init virtual devices\n"); > - > TAILQ_FOREACH(solib, &solib_list, next) { > + RTE_LOG(INFO, EAL, "open shared lib %s\n", solib->name); > solib->lib_handle = dlopen(solib->name, RTLD_NOW); > if ((solib->lib_handle == NULL) && (solib->name[0] != '/')) { > /* relative path: try again with "./" prefix */ > @@ -1054,6 +1052,9 @@ rte_eal_init(int argc, char **argv) > RTE_LOG(WARNING, EAL, "%s\n", dlerror()); > } > > + if (rte_eal_vdev_init() < 0) > + rte_panic("Cannot init virtual devices\n"); > + > RTE_LOG(DEBUG, EAL, "Master core %u is ready (tid=%x)\n", > rte_config.master_lcore, (int)thread_id); > Could you explain this move? It seems allowing vdev as external library. Maybe it should be in another commit. > --- a/lib/librte_pmd_pcap/rte_eth_pcap.h > +++ b/lib/librte_pmd_pcap/rte_eth_pcap.h > @@ -45,8 +45,6 @@ extern "C" { > #undef PCAP_CAN_SEND > #endif > > -#define RTE_ETH_PCAP_PARAM_NAME "eth_pcap" > - > /* struct args_dict is declared in rte_eth_pcap_args_parser.h */ > struct args_dict; > > @@ -64,12 +62,6 @@ int rte_eth_from_pcaps_n_dumpers(pcap_t * const > rx_queues[], const unsigned numa_node, > struct args_dict *dict); > > -/** > - * For use by the EAL only. Called as part of EAL init to set up any dummy > NICs - * configured on command line. > - */ > -int rte_pmd_pcap_init(const char *name, const char *params); > - > #ifdef __cplusplus > } > #endif After having rebased on HEAD, do we still need a header file for pmd_pcap? Thanks -- Thomas