[dpdk-dev,v4,09/23] rte_mbuf.h: explicit casts for int16 to uint16

Message ID 152627461281.53156.1973319644929375310.stgit@localhost.localdomain (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail apply patch file failure

Commit Message

Andy Green May 14, 2018, 5:10 a.m. UTC
  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 <andy@warmcat.com>
---
 lib/librte_mbuf/rte_mbuf.h |   12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
  

Comments

Olivier Matz May 17, 2018, 8:30 a.m. UTC | #1
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 <andy@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.matz@6wind.com>
  

Patch

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);