[dpdk-dev,v4,09/23] rte_mbuf.h: explicit casts for int16 to uint16
Checks
Commit Message
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
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>
@@ -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);