Hi Hemant, On Fri, Jan 19, 2018 at 06:11:47PM +0530, Hemant Agrawal wrote: > Hi Olivier, > > On 1/19/2018 3:31 PM, Olivier Matz wrote: > > On Thu, Jan 18, 2018 at 06:56:28PM +0530, Hemant Agrawal wrote: > > > This patch add support for various mempool ops config helper APIs. > > > > > > 1.User defined mempool ops > > > 2.Platform detected HW mempool ops (active). > > > 3.Best selection of mempool ops by looking into user defined, > > > platform registered and compile time configured. > > > > > > Signed-off-by: Hemant Agrawal <hemant.agra...@nxp.com> > > > --- > > > > ... > > > > > --- /dev/null > > > +++ b/lib/librte_mbuf/rte_mbuf_pool_ops.c > > > @@ -0,0 +1,68 @@ > > > +/* SPDX-License-Identifier: BSD-3-Clause > > > + * Copyright 2018 NXP > > > + */ > > > + > > > +#include <string.h> > > > +#include <rte_eal.h> > > > +#include <rte_mbuf.h> > > > +#include <rte_errno.h> > > > +#include <rte_mbuf_pool_ops.h> > > > +#include <rte_malloc.h> > > > + > > > +static char *plat_mbuf_pool_ops_name; > > > > I have some doubts about secondary processes. > > > > Maybe it's ok if the loaded driver and eal arguments are exactly the > > same in the secondary process. It would be safer to use a named memzone > > for that. > > > Typically a secondary process should not set the platform mempool name. > I can also add a check to know if secondary process is trying to do it. > > Yes. I can change it to a named memzone.
With a memzone, maybe there is even no need for a static variable. Something like this? set(): mz = rte_memzone_lookup("mbuf_platform_pool_ops"); if (mz == NULL) { mz = rte_memzone_reszerve("mbuf_platform_pool_ops", LEN); if (mz == NULL) return -rte_errno; /* << this even protects against a set() in a 2nd process */ } if (strlen(name) >= LEN) return -ENAMETOOLONG; strncpy(mz->addr, name, LEN); get(): mz = rte_memzone_lookup("mbuf_platform_pool_ops"); if (mz == NULL) return NULL; return mz->addr; > > > > It would be even safer to not use secondary processes ;) > > > > > > > + > > > +int > > > +rte_mbuf_register_platform_mempool_ops(const char *ops_name) > > > +{ > > > > We have "register" for platform and "set" for user. > > I think "set" should be used everywhere. > > > ok > > > > + if (plat_mbuf_pool_ops_name == NULL) { > > > + plat_mbuf_pool_ops_name = > > > + rte_malloc(NULL, RTE_MEMPOOL_OPS_NAMESIZE, 0); > > > + if (plat_mbuf_pool_ops_name == NULL) > > > + return -ENOMEM; > > > + strcpy((char *)plat_mbuf_pool_ops_name, ops_name); > > > > If strlen(ops_name) >= RTE_MEMPOOL_OPS_NAMESIZE, this may lead to > > bad behavior. > > > That should not happen, we can check that. > > > I suggest to simply do a strdup() instead. > > Well, strdup based string will not be readable/accessible from the secondary > process? Correct. something to check the length should be added though.