Olivier, > On Dec 8, 2017, at 7:46 PM, Olivier Matz <olivier.m...@6wind.com> wrote: >
> > lib/librte_mbuf/rte_mbuf.h | 23 ++++++++++++++++++----- > 1 file changed, 18 insertions(+), 5 deletions(-) > > diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h > index ce8a05ddf..dd08cb72b 100644 > --- a/lib/librte_mbuf/rte_mbuf.h > +++ b/lib/librte_mbuf/rte_mbuf.h > @@ -764,6 +764,13 @@ rte_mbuf_refcnt_set(struct rte_mbuf *m, uint16_t > new_value) > rte_atomic16_set(&m->refcnt_atomic, new_value); > } > > +/* internal */ > +static inline uint16_t > +__rte_mbuf_refcnt_update(struct rte_mbuf *m, int16_t value) > +{ > + return (uint16_t)(rte_atomic16_add_return(&m->refcnt_atomic, value)); What’s the purpose of using direct cast to uint16_t here and in other places? > +} > + > /** > * Adds given value to an mbuf's refcnt and returns its new value. > * @param m > @@ -788,19 +795,26 @@ rte_mbuf_refcnt_update(struct rte_mbuf *m, int16_t > value) > return 1 + value; > } > > - return (uint16_t)(rte_atomic16_add_return(&m->refcnt_atomic, value)); > + return __rte_mbuf_refcnt_update(m, value); > } > > #else /* ! RTE_MBUF_REFCNT_ATOMIC */ > > +/* internal */ > +static inline uint16_t > +__rte_mbuf_refcnt_update(struct rte_mbuf *m, int16_t value) > +{ > + m->refcnt = (uint16_t)(m->refcnt + value); > + return m->refcnt; > +} > + > /** > * Adds given value to an mbuf's refcnt and returns its new value. > */ > static inline uint16_t > rte_mbuf_refcnt_update(struct rte_mbuf *m, int16_t value) > { > - m->refcnt = (uint16_t)(m->refcnt + value); > - return m->refcnt; > + return __rte_mbuf_refcnt_update(m, value); > } > > /** > @@ -1364,8 +1378,7 @@ rte_pktmbuf_prefree_seg(struct rte_mbuf *m) > > return m; > > - } else if (rte_atomic16_add_return(&m->refcnt_atomic, -1) == 0) { > - > + } else if (__rte_mbuf_refcnt_update(m, -1) == 0) { > > if (RTE_MBUF_INDIRECT(m)) > rte_pktmbuf_detach(m); > -- > 2.11.0 >