On Mon, May 14, 2018 at 01:10:12PM +0800, Andy Green wrote:
> differences to the atomic16 are signed, but the
> atomic16 itself is unsigned.  It needs to be
> made explicit with casts.
> 
> Signed-off-by: Andy Green <a...@warmcat.com>
> ---
>  lib/librte_mbuf/rte_mbuf.h |   12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
> index a2a37a311..c214f1945 100644
> --- a/lib/librte_mbuf/rte_mbuf.h
> +++ b/lib/librte_mbuf/rte_mbuf.h
> @@ -806,7 +806,7 @@ rte_mbuf_refcnt_read(const struct rte_mbuf *m)
>  static inline void
>  rte_mbuf_refcnt_set(struct rte_mbuf *m, uint16_t new_value)
>  {
> -     rte_atomic16_set(&m->refcnt_atomic, new_value);
> +     rte_atomic16_set(&m->refcnt_atomic, (int16_t)new_value);
>  }
>  
>  /* internal */
> @@ -837,8 +837,8 @@ rte_mbuf_refcnt_update(struct rte_mbuf *m, int16_t value)
>        */
>       if (likely(rte_mbuf_refcnt_read(m) == 1)) {
>               ++value;
> -             rte_mbuf_refcnt_set(m, value);
> -             return value;
> +             rte_mbuf_refcnt_set(m, (uint16_t)value);
> +             return (uint16_t)value;
>       }
>  
>       return __rte_mbuf_refcnt_update(m, value);
> @@ -909,7 +909,7 @@ static inline void
>  rte_mbuf_ext_refcnt_set(struct rte_mbuf_ext_shared_info *shinfo,
>       uint16_t new_value)
>  {
> -     rte_atomic16_set(&shinfo->refcnt_atomic, new_value);
> +     rte_atomic16_set(&shinfo->refcnt_atomic, (int16_t)new_value);
>  }
>  
>  /**
> @@ -929,8 +929,8 @@ rte_mbuf_ext_refcnt_update(struct 
> rte_mbuf_ext_shared_info *shinfo,
>  {
>       if (likely(rte_mbuf_ext_refcnt_read(shinfo) == 1)) {
>               ++value;
> -             rte_mbuf_ext_refcnt_set(shinfo, value);
> -             return value;
> +             rte_mbuf_ext_refcnt_set(shinfo, (uint16_t)value);
> +             return (uint16_t)value;
>       }
>  
>       return (uint16_t)rte_atomic16_add_return(&shinfo->refcnt_atomic, value);
> 

Looking at the API of functions, I think there are some inconsistencies:

  static inline void
  rte_mbuf_refcnt_set(struct rte_mbuf *m, uint16_t new_value)

  /* internal */
  static inline uint16_t
  __rte_mbuf_refcnt_update(struct rte_mbuf *m, int16_t value)

  static inline uint16_t
  rte_mbuf_refcnt_update(struct rte_mbuf *m, int16_t value)

For next version, I think we should change it to be int16_t everywhere,
to avoid some of the explicit casts you are introducing.

If we want it for 18.05:
Acked-by: Olivier Matz <olivier.m...@6wind.com>

Reply via email to