On Thu, Apr 9, 2020 at 7:31 PM Jerin Jacob <jerinjac...@gmail.com> wrote: > > On Thu, Apr 9, 2020 at 4:24 PM <xiangxia.m....@gmail.com> wrote: > > > > From: Tonghao Zhang <xiangxia.m....@gmail.com> > > > > This patch introduces last-init queue, user can register a > > callback for theirs initialization. Running rte_last_init_run(), > > the almost resource of DPDK are available, such as memzone, ring. > > With this way, user don't introduce additional codes in eal layer. > > > > [This patch will be used for next patch.] > > > > Signed-off-by: Tonghao Zhang <xiangxia.m....@gmail.com> > > --- > > lib/librte_eal/common/eal_common_last_init.c | 43 > > ++++++++++++++++++++++++++++ > > lib/librte_eal/common/meson.build | 1 + > > lib/librte_eal/freebsd/Makefile | 1 + > > lib/librte_eal/freebsd/eal.c | 7 +++++ > > lib/librte_eal/include/rte_last_init.h | 36 +++++++++++++++++++++++ > > Update doc/api/doxy-api-index.md and hook to documenion. > > > +void > > +rte_last_init_register(rte_last_init_cb cb, const void *arg) > > +{ > > + struct rte_last_init *last; > > + > > + RTE_VERIFY(cb); > > + > > + last = malloc(sizeof(*last)); > > Does not look like this memory is NOT freed anywhere. > > > + if (last == NULL) > > + rte_panic("Alloc memory for rte_last_init node failed\n"); > > + > > + last->cb = cb; > > + last->arg = arg; > > + > > + TAILQ_INSERT_TAIL(&rte_last_init_list, last, next); > > +} > > + > > +int > > +rte_last_init_run(void) > > +{ > > + struct rte_last_init *init; > > + int ret; > > + > > + TAILQ_FOREACH(init, &rte_last_init_list, next) { > > + ret = init->cb(init->arg); > > + if (ret) > > + return ret; > > + } > > + > > + return 0; > > +} > > diff --git a/lib/librte_eal/common/meson.build > > b/lib/librte_eal/common/meson.build > > > +typedef int (*rte_last_init_cb)(const void *arg); > > + > > +/** > > + * A structure describing a generic initialization. > > + */ > > +struct rte_last_init { > > + TAILQ_ENTRY(rte_last_init) next; /**< Next bus object in linked > > list */ > > + const void *arg; > > + rte_last_init_cb cb; > > +}; > > No need to expose this structure. Move to eal_private.h > > > > + > > +/** Double linked list of buses */ > > +TAILQ_HEAD(rte_last_init_list, rte_last_init); > > No need to expose this structure. Move to eal_private.h > > > + > > +void rte_last_init_register(rte_last_init_cb cb, const void *arg); > > Add Doxygen comment. > > Should we change to rte_init_register()? add an enum to specify where to > call this RTE_INIT_PRE, RTE_INIT_POST to take care of the future needs. > Just thought of bringing this point to make sure we can use this > scheme for another use case IF ANY. > > > > +int rte_last_init_run(void); > > No need to expose this function in public API. Move to eal_private.h. > Please start the internal functions with eal_(dont use rte_ for > internal functions) Thanks for your review, v2 is sent. thanks.
-- Best regards, Tonghao