From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olivier Matz Subject: Re: [PATCH v7 1/2] ring: add reset API to flush the ring when not in use Date: Fri, 29 Mar 2019 15:17:55 +0100 Message-ID: <20190329141755.ziopuvhepdi372aa@platinum> References: <20181212062404.30243-1-gavin.hu@arm.com> <1552620686-10347-2-git-send-email-gavin.hu@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: dev@dpdk.org, nd@arm.com, thomas@monjalon.net, jerinj@marvell.com, hemant.agrawal@nxp.com, nipun.gupta@nxp.com, Honnappa.Nagarahalli@arm.com, i.maximets@samsung.com, stable@dpdk.org To: Gavin Hu Return-path: Content-Disposition: inline In-Reply-To: <1552620686-10347-2-git-send-email-gavin.hu@arm.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi, On Fri, Mar 15, 2019 at 11:31:25AM +0800, Gavin Hu wrote: > Currently, the flush is done by dequeuing the ring in a while loop. It is > much simpler to flush the queue by resetting the head and tail indices. > > Fixes: af75078fece3 ("first public release") > Cc: stable@dpdk.org > > Signed-off-by: Gavin Hu > Reviewed-by: Ruifeng Wang > Reviewed-by: Honnappa Nagarahalli > --- > lib/librte_ring/rte_ring.h | 20 ++++++++++++++++++++ > lib/librte_ring/rte_ring_version.map | 7 +++++++ > 2 files changed, 27 insertions(+) > > diff --git a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h > index af5444a..2830300 100644 > --- a/lib/librte_ring/rte_ring.h > +++ b/lib/librte_ring/rte_ring.h > @@ -671,6 +671,26 @@ rte_ring_dequeue(struct rte_ring *r, void **obj_p) > } > > /** > + * Flush a ring. > + * > + * This function flush all the elements in a ring > + * > + * @b EXPERIMENTAL: this API may change without prior notice > + * > + * @warning > + * Make sure the ring is not in use while calling this function. > + * > + * @param r > + * A pointer to the ring structure. > + */ > +static inline void __rte_experimental > +rte_ring_reset(struct rte_ring *r) > +{ > + r->prod.head = r->cons.head = 0; > + r->prod.tail = r->cons.tail = 0; > +} > + > +/** > * Return the number of entries in a ring. > * > * @param r > diff --git a/lib/librte_ring/rte_ring_version.map b/lib/librte_ring/rte_ring_version.map > index d935efd..581d9ca 100644 > --- a/lib/librte_ring/rte_ring_version.map > +++ b/lib/librte_ring/rte_ring_version.map > @@ -17,3 +17,10 @@ DPDK_2.2 { > rte_ring_free; > > } DPDK_2.0; > + > +EXPERIMENTAL { > + global: > + > + rte_ring_reset; > + > +}; > -- > 2.7.4 > To me, a static inline function does not need to be added in rte_ring_version.map (or is it due to a check script checking the __rte_experimental tag ?). I found at least one commit where it is not the case: c277b34c1b3b ("mbuf: add function returning buffer address") There are 2 options: 1- remove the rte_ring_version.map part of the patch. 2- change the static inline function into a standard function. I would prefer 2-, because it allows to keep an api/abi compat layer in the future. Regards Olivier