> From: Pavan Nikhilesh Bhagavatula [mailto:pbhagavat...@caviumnetworks.com]
> Sent: Monday, August 28, 2017 12:33 PM
> To: Van Haaren, Harry <harry.van.haa...@intel.com>
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH] eal: added new `rte_lcore_is_service_lcore` 
> API.
> 
> On Mon, Aug 28, 2017 at 10:59:51AM +0000, Van Haaren, Harry wrote:
> > > From: Pavan Nikhilesh [mailto:pbhagavat...@caviumnetworks.com]
> > > Sent: Wednesday, August 23, 2017 4:10 PM
> > > To: dev@dpdk.org
> > > Cc: Van Haaren, Harry <harry.van.haa...@intel.com>; Pavan Nikhilesh
> > > <pbhagavat...@caviumnetworks.com>
> > > Subject: [dpdk-dev] [PATCH] eal: added new `rte_lcore_is_service_lcore` 
> > > API.
> > >
> > > This API can be used to test if an lcore(EAL thread) is a service lcore.
> > >
> > > Signed-off-by: Pavan Nikhilesh <pbhagavat...@caviumnetworks.com>
> > > ---
> > >  lib/librte_eal/common/include/rte_lcore.h | 18 ++++++++++++++++++
> > >  1 file changed, 18 insertions(+)
> > >
> > > diff --git a/lib/librte_eal/common/include/rte_lcore.h
> > > b/lib/librte_eal/common/include/rte_lcore.h
> > > index 50e0d0f..7854ea1 100644
> > > --- a/lib/librte_eal/common/include/rte_lcore.h
> > > +++ b/lib/librte_eal/common/include/rte_lcore.h
> > > @@ -180,6 +180,24 @@ rte_lcore_is_enabled(unsigned lcore_id)
> > >  }
> > >
> > >  /**
> > > + * Test if an lcore is service lcore.
> > > + *
> > > + * @param lcore_id
> > > + *   The identifier of the lcore, which MUST be between 0 and
> > > + *   RTE_MAX_LCORE-1.
> > > + * @return
> > > + *   True if the given lcore is service; false otherwise.
> > > + */
> > > +static inline int
> > > +rte_lcore_is_service_lcore(unsigned lcore_id)
> > > +{
> > > + struct rte_config *cfg = rte_eal_get_configuration();
> > > + if (lcore_id >= RTE_MAX_LCORE)
> > > +         return 0;
> > > + return cfg->lcore_role[lcore_id] == ROLE_SERVICE;
> > > +}
> >
> > No header file and Static inline - so this is only to be used internally in 
> > the service
> cores library?
> > If so, the function should actually be used, instead of only added but not 
> > used in the
> library itself.
> >
> 
> The enum rte_lcore_role_t has ROLE_SERVICE which tells that a particular 
> lcore is
> a service lcore as well as an EAL thread some libraries such as rte_timer 
> allow
> specific operations only over EAL threads.

Understood that role of cores is important, and that rte_timer might require 
this information.


> The rte_timer lib uses the rte_is_lcore_enabled() call to check if a lcore is 
> an
> EAL thread, Which checks if the lcore role is  ROLE_RTE. But it should also
> allow timers to be registered on a service core as processing those timers can
> be done on them.

No problem from me here either - although it's the Timers library maintainer 
that should check this.


> This new function allows such libraries to check if the role is
> ROLE_SERVICE and allow those operations.

If the timers library requires information about service-cores, it should use a 
public API to retrieve that information. Having "internal" functions between 
libraries is not nice.

I think a better design would be to add this function as a public function, 
(add it to the .map files etc) and then call the public function from the 
timers library.

Does that sound like a good solution? -Harry


> Currently, the only rte_timer library has this specific role check. The
> following patch shows the usage in rte_timer library.
> 
> http://dpdk.org/dev/patchwork/patch/27819/
> 
> > Or am I mis-understanding the intent?
> >
> > -Harry
> 
> Thanks,
> Pavan.

Reply via email to