[dpdk-dev] [PATCH v3 3/7] mbuf: add pool ops name selection API helpers
Olivier Matz
olivier.matz at 6wind.com
Fri Jan 19 14:10:52 CET 2018
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.agrawal at 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.
More information about the dev
mailing list