diff mbox

Change invalid buffer pool handle to zero

Message ID 1408360912-17592-1-git-send-email-petri.savolainen@linaro.org
State New
Headers show

Commit Message

Petri Savolainen Aug. 18, 2014, 11:21 a.m. UTC
For consistency and easier debugging, use zero as the value of
an invalid pool handle (in linux-generic).

Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org>
---
 include/odp_buffer_pool.h                          |  2 +-
 .../linux-generic/include/odp_buffer_internal.h    |  4 +-
 .../include/odp_buffer_pool_internal.h             |  2 +-
 platform/linux-generic/odp_buffer_pool.c           | 50 +++++++++++++++-------
 4 files changed, 38 insertions(+), 20 deletions(-)

Comments

Maxim Uvarov Aug. 19, 2014, 12:54 p.m. UTC | #1
Change looks good, one more review for that please.

Maxim.

On 08/18/2014 03:21 PM, Petri Savolainen wrote:
> For consistency and easier debugging, use zero as the value of
> an invalid pool handle (in linux-generic).
>
> Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org>
> ---
>   include/odp_buffer_pool.h                          |  2 +-
>   .../linux-generic/include/odp_buffer_internal.h    |  4 +-
>   .../include/odp_buffer_pool_internal.h             |  2 +-
>   platform/linux-generic/odp_buffer_pool.c           | 50 +++++++++++++++-------
>   4 files changed, 38 insertions(+), 20 deletions(-)
>
> diff --git a/include/odp_buffer_pool.h b/include/odp_buffer_pool.h
> index 26d9f14..fe88898 100644
> --- a/include/odp_buffer_pool.h
> +++ b/include/odp_buffer_pool.h
> @@ -27,7 +27,7 @@ extern "C" {
>   #define ODP_BUFFER_POOL_NAME_LEN  32
>   
>   /** Invalid buffer pool */
> -#define ODP_BUFFER_POOL_INVALID  (0xffffffff)
> +#define ODP_BUFFER_POOL_INVALID   0
>   
>   /** ODP buffer pool */
>   typedef uint32_t odp_buffer_pool_t;
> diff --git a/platform/linux-generic/include/odp_buffer_internal.h b/platform/linux-generic/include/odp_buffer_internal.h
> index bffd0dd..232ddb5 100644
> --- a/platform/linux-generic/include/odp_buffer_internal.h
> +++ b/platform/linux-generic/include/odp_buffer_internal.h
> @@ -48,7 +48,7 @@ typedef union odp_buffer_bits_t {
>   	odp_buffer_t handle;
>   
>   	struct {
> -		uint32_t pool:ODP_BUFFER_POOL_BITS;
> +		uint32_t pool:ODP_BUFFER_POOL_BITS;   /* pool index */
>   		uint32_t index:ODP_BUFFER_INDEX_BITS;
>   	};
>   } odp_buffer_bits_t;
> @@ -91,7 +91,7 @@ typedef struct odp_buffer_hdr_t {
>   	odp_atomic_int_t         ref_count;  /* reference count */
>   	odp_buffer_scatter_t     scatter;    /* Scatter/gather list */
>   	int                      type;       /* type of next header */
> -	odp_buffer_pool_t        pool;       /* buffer pool */
> +	odp_buffer_pool_t        pool;       /* buffer pool handle */
>   
>   } odp_buffer_hdr_t;
>   
> diff --git a/platform/linux-generic/include/odp_buffer_pool_internal.h b/platform/linux-generic/include/odp_buffer_pool_internal.h
> index 1c0a9fc..52a507e 100644
> --- a/platform/linux-generic/include/odp_buffer_pool_internal.h
> +++ b/platform/linux-generic/include/odp_buffer_pool_internal.h
> @@ -68,7 +68,7 @@ struct pool_entry_s {
>   extern void *pool_entry_ptr[];
>   
>   
> -static inline void *get_pool_entry(odp_buffer_pool_t pool_id)
> +static inline void *get_pool_entry(uint32_t pool_id)
>   {
>   	return pool_entry_ptr[pool_id];
>   }
> diff --git a/platform/linux-generic/odp_buffer_pool.c b/platform/linux-generic/odp_buffer_pool.c
> index a48781a..10697cc 100644
> --- a/platform/linux-generic/odp_buffer_pool.c
> +++ b/platform/linux-generic/odp_buffer_pool.c
> @@ -80,13 +80,28 @@ void *pool_entry_ptr[ODP_CONFIG_BUFFER_POOLS];
>   static __thread odp_buffer_chunk_hdr_t *local_chunk[ODP_CONFIG_BUFFER_POOLS];
>   
>   
> +static inline odp_buffer_pool_t pool_index_to_handle(uint32_t pool_id)
> +{
> +	return pool_id + 1;
> +}
> +
> +
> +static inline uint32_t pool_handle_to_index(odp_buffer_pool_t pool_hdl)
> +{
> +	return pool_hdl - 1;
> +}
> +
> +
>   static inline void set_handle(odp_buffer_hdr_t *hdr,
>   			      pool_entry_t *pool, uint32_t index)
>   {
> -	uint32_t pool_id = (uint32_t) pool->s.pool;
> +	odp_buffer_pool_t pool_hdl = pool->s.pool;
> +	uint32_t          pool_id  = pool_handle_to_index(pool_hdl);
>   
> -	if (pool_id > ODP_CONFIG_BUFFER_POOLS)
> -		ODP_ERR("set_handle: Bad pool id\n");
> +	if (pool_id >= ODP_CONFIG_BUFFER_POOLS) {
> +		ODP_ERR("set_handle: Bad pool handle %u\n", pool_hdl);
> +		exit(0);
> +	}
>   
>   	if (index > ODP_BUFFER_MAX_INDEX)
>   		ODP_ERR("set_handle: Bad buffer index\n");
> @@ -98,7 +113,7 @@ static inline void set_handle(odp_buffer_hdr_t *hdr,
>   
>   int odp_buffer_pool_init_global(void)
>   {
> -	odp_buffer_pool_t i;
> +	uint32_t i;
>   
>   	pool_tbl = odp_shm_reserve("odp_buffer_pools",
>   				   sizeof(pool_table_t),
> @@ -113,7 +128,7 @@ int odp_buffer_pool_init_global(void)
>   		/* init locks */
>   		pool_entry_t *pool = &pool_tbl->pool[i];
>   		LOCK_INIT(&pool->s.lock);
> -		pool->s.pool = i;
> +		pool->s.pool = pool_index_to_handle(i);
>   
>   		pool_entry_ptr[i] = pool;
>   	}
> @@ -363,9 +378,9 @@ odp_buffer_pool_t odp_buffer_pool_create(const char *name,
>   					 size_t buf_size, size_t buf_align,
>   					 int buf_type)
>   {
> -	odp_buffer_pool_t i;
> +	odp_buffer_pool_t pool_hdl = ODP_BUFFER_POOL_INVALID;
>   	pool_entry_t *pool;
> -	odp_buffer_pool_t pool_id = ODP_BUFFER_POOL_INVALID;
> +	uint32_t i;
>   
>   	for (i = 0; i < ODP_CONFIG_BUFFER_POOLS; i++) {
>   		pool = get_pool_entry(i);
> @@ -388,20 +403,20 @@ odp_buffer_pool_t odp_buffer_pool_create(const char *name,
>   
>   			UNLOCK(&pool->s.lock);
>   
> -			pool_id = i;
> +			pool_hdl = pool->s.pool;
>   			break;
>   		}
>   
>   		UNLOCK(&pool->s.lock);
>   	}
>   
> -	return pool_id;
> +	return pool_hdl;
>   }
>   
>   
>   odp_buffer_pool_t odp_buffer_pool_lookup(const char *name)
>   {
> -	odp_buffer_pool_t i;
> +	uint32_t i;
>   	pool_entry_t *pool;
>   
>   	for (i = 0; i < ODP_CONFIG_BUFFER_POOLS; i++) {
> @@ -411,7 +426,7 @@ odp_buffer_pool_t odp_buffer_pool_lookup(const char *name)
>   		if (strcmp(name, pool->s.name) == 0) {
>   			/* found it */
>   			UNLOCK(&pool->s.lock);
> -			return i;
> +			return pool->s.pool;
>   		}
>   		UNLOCK(&pool->s.lock);
>   	}
> @@ -420,11 +435,12 @@ odp_buffer_pool_t odp_buffer_pool_lookup(const char *name)
>   }
>   
>   
> -odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_id)
> +odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_hdl)
>   {
>   	pool_entry_t *pool;
>   	odp_buffer_chunk_hdr_t *chunk;
>   	odp_buffer_bits_t handle;
> +	uint32_t pool_id = pool_handle_to_index(pool_hdl);
>   
>   	pool  = get_pool_entry(pool_id);
>   	chunk = local_chunk[pool_id];
> @@ -462,12 +478,12 @@ odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_id)
>   void odp_buffer_free(odp_buffer_t buf)
>   {
>   	odp_buffer_hdr_t *hdr;
> -	odp_buffer_pool_t pool_id;
> +	uint32_t pool_id;
>   	pool_entry_t *pool;
>   	odp_buffer_chunk_hdr_t *chunk_hdr;
>   
>   	hdr       = odp_buf_to_hdr(buf);
> -	pool_id   = hdr->pool;
> +	pool_id   = pool_handle_to_index(hdr->pool);
>   	pool      = get_pool_entry(pool_id);
>   	chunk_hdr = local_chunk[pool_id];
>   
> @@ -500,13 +516,15 @@ odp_buffer_pool_t odp_buffer_pool(odp_buffer_t buf)
>   }
>   
>   
> -void odp_buffer_pool_print(odp_buffer_pool_t pool_id)
> +void odp_buffer_pool_print(odp_buffer_pool_t pool_hdl)
>   {
>   	pool_entry_t *pool;
>   	odp_buffer_chunk_hdr_t *chunk_hdr;
>   	uint32_t i;
> +	uint32_t pool_id;
>   
> -	pool = get_pool_entry(pool_id);
> +	pool_id = pool_handle_to_index(pool_hdl);
> +	pool    = get_pool_entry(pool_id);
>   
>   	printf("Pool info\n");
>   	printf("---------\n");
Mike Holmes Aug. 19, 2014, 2:26 p.m. UTC | #2
On 19 August 2014 08:54, Maxim Uvarov <maxim.uvarov@linaro.org> wrote:

> Change looks good, one more review for that please.
>
> Maxim.
>
>
> On 08/18/2014 03:21 PM, Petri Savolainen wrote:
>
>> For consistency and easier debugging, use zero as the value of
>> an invalid pool handle (in linux-generic).
>>
>> Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org>
>>
> Tested-by: Mike Holmes <mike.holmes@linaro.org>

> ---
>>   include/odp_buffer_pool.h                          |  2 +-
>>   .../linux-generic/include/odp_buffer_internal.h    |  4 +-
>>   .../include/odp_buffer_pool_internal.h             |  2 +-
>>   platform/linux-generic/odp_buffer_pool.c           | 50
>> +++++++++++++++-------
>>   4 files changed, 38 insertions(+), 20 deletions(-)
>>
>> diff --git a/include/odp_buffer_pool.h b/include/odp_buffer_pool.h
>> index 26d9f14..fe88898 100644
>> --- a/include/odp_buffer_pool.h
>> +++ b/include/odp_buffer_pool.h
>> @@ -27,7 +27,7 @@ extern "C" {
>>   #define ODP_BUFFER_POOL_NAME_LEN  32
>>     /** Invalid buffer pool */
>> -#define ODP_BUFFER_POOL_INVALID  (0xffffffff)
>> +#define ODP_BUFFER_POOL_INVALID   0
>>     /** ODP buffer pool */
>>   typedef uint32_t odp_buffer_pool_t;
>> diff --git a/platform/linux-generic/include/odp_buffer_internal.h
>> b/platform/linux-generic/include/odp_buffer_internal.h
>> index bffd0dd..232ddb5 100644
>> --- a/platform/linux-generic/include/odp_buffer_internal.h
>> +++ b/platform/linux-generic/include/odp_buffer_internal.h
>> @@ -48,7 +48,7 @@ typedef union odp_buffer_bits_t {
>>         odp_buffer_t handle;
>>         struct {
>> -               uint32_t pool:ODP_BUFFER_POOL_BITS;
>> +               uint32_t pool:ODP_BUFFER_POOL_BITS;   /* pool index */
>>                 uint32_t index:ODP_BUFFER_INDEX_BITS;
>>         };
>>   } odp_buffer_bits_t;
>> @@ -91,7 +91,7 @@ typedef struct odp_buffer_hdr_t {
>>         odp_atomic_int_t         ref_count;  /* reference count */
>>         odp_buffer_scatter_t     scatter;    /* Scatter/gather list */
>>         int                      type;       /* type of next header */
>> -       odp_buffer_pool_t        pool;       /* buffer pool */
>> +       odp_buffer_pool_t        pool;       /* buffer pool handle */
>>     } odp_buffer_hdr_t;
>>   diff --git a/platform/linux-generic/include/odp_buffer_pool_internal.h
>> b/platform/linux-generic/include/odp_buffer_pool_internal.h
>> index 1c0a9fc..52a507e 100644
>> --- a/platform/linux-generic/include/odp_buffer_pool_internal.h
>> +++ b/platform/linux-generic/include/odp_buffer_pool_internal.h
>> @@ -68,7 +68,7 @@ struct pool_entry_s {
>>   extern void *pool_entry_ptr[];
>>     -static inline void *get_pool_entry(odp_buffer_pool_t pool_id)
>> +static inline void *get_pool_entry(uint32_t pool_id)
>>   {
>>         return pool_entry_ptr[pool_id];
>>   }
>> diff --git a/platform/linux-generic/odp_buffer_pool.c
>> b/platform/linux-generic/odp_buffer_pool.c
>> index a48781a..10697cc 100644
>> --- a/platform/linux-generic/odp_buffer_pool.c
>> +++ b/platform/linux-generic/odp_buffer_pool.c
>> @@ -80,13 +80,28 @@ void *pool_entry_ptr[ODP_CONFIG_BUFFER_POOLS];
>>   static __thread odp_buffer_chunk_hdr_t *local_chunk[ODP_CONFIG_
>> BUFFER_POOLS];
>>     +static inline odp_buffer_pool_t pool_index_to_handle(uint32_t
>> pool_id)
>> +{
>> +       return pool_id + 1;
>> +}
>> +
>> +
>> +static inline uint32_t pool_handle_to_index(odp_buffer_pool_t pool_hdl)
>> +{
>> +       return pool_hdl - 1;
>> +}
>> +
>> +
>>   static inline void set_handle(odp_buffer_hdr_t *hdr,
>>                               pool_entry_t *pool, uint32_t index)
>>   {
>> -       uint32_t pool_id = (uint32_t) pool->s.pool;
>> +       odp_buffer_pool_t pool_hdl = pool->s.pool;
>> +       uint32_t          pool_id  = pool_handle_to_index(pool_hdl);
>>   -     if (pool_id > ODP_CONFIG_BUFFER_POOLS)
>> -               ODP_ERR("set_handle: Bad pool id\n");
>> +       if (pool_id >= ODP_CONFIG_BUFFER_POOLS) {
>> +               ODP_ERR("set_handle: Bad pool handle %u\n", pool_hdl);
>> +               exit(0);
>> +       }
>>         if (index > ODP_BUFFER_MAX_INDEX)
>>                 ODP_ERR("set_handle: Bad buffer index\n");
>> @@ -98,7 +113,7 @@ static inline void set_handle(odp_buffer_hdr_t *hdr,
>>     int odp_buffer_pool_init_global(void)
>>   {
>> -       odp_buffer_pool_t i;
>> +       uint32_t i;
>>         pool_tbl = odp_shm_reserve("odp_buffer_pools",
>>                                    sizeof(pool_table_t),
>> @@ -113,7 +128,7 @@ int odp_buffer_pool_init_global(void)
>>                 /* init locks */
>>                 pool_entry_t *pool = &pool_tbl->pool[i];
>>                 LOCK_INIT(&pool->s.lock);
>> -               pool->s.pool = i;
>> +               pool->s.pool = pool_index_to_handle(i);
>>                 pool_entry_ptr[i] = pool;
>>         }
>> @@ -363,9 +378,9 @@ odp_buffer_pool_t odp_buffer_pool_create(const char
>> *name,
>>                                          size_t buf_size, size_t
>> buf_align,
>>                                          int buf_type)
>>   {
>> -       odp_buffer_pool_t i;
>> +       odp_buffer_pool_t pool_hdl = ODP_BUFFER_POOL_INVALID;
>>         pool_entry_t *pool;
>> -       odp_buffer_pool_t pool_id = ODP_BUFFER_POOL_INVALID;
>> +       uint32_t i;
>>         for (i = 0; i < ODP_CONFIG_BUFFER_POOLS; i++) {
>>                 pool = get_pool_entry(i);
>> @@ -388,20 +403,20 @@ odp_buffer_pool_t odp_buffer_pool_create(const char
>> *name,
>>                         UNLOCK(&pool->s.lock);
>>   -                     pool_id = i;
>> +                       pool_hdl = pool->s.pool;
>>                         break;
>>                 }
>>                 UNLOCK(&pool->s.lock);
>>         }
>>   -     return pool_id;
>> +       return pool_hdl;
>>   }
>>       odp_buffer_pool_t odp_buffer_pool_lookup(const char *name)
>>   {
>> -       odp_buffer_pool_t i;
>> +       uint32_t i;
>>         pool_entry_t *pool;
>>         for (i = 0; i < ODP_CONFIG_BUFFER_POOLS; i++) {
>> @@ -411,7 +426,7 @@ odp_buffer_pool_t odp_buffer_pool_lookup(const char
>> *name)
>>                 if (strcmp(name, pool->s.name) == 0) {
>>                         /* found it */
>>                         UNLOCK(&pool->s.lock);
>> -                       return i;
>> +                       return pool->s.pool;
>>                 }
>>                 UNLOCK(&pool->s.lock);
>>         }
>> @@ -420,11 +435,12 @@ odp_buffer_pool_t odp_buffer_pool_lookup(const char
>> *name)
>>   }
>>     -odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_id)
>> +odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_hdl)
>>   {
>>         pool_entry_t *pool;
>>         odp_buffer_chunk_hdr_t *chunk;
>>         odp_buffer_bits_t handle;
>> +       uint32_t pool_id = pool_handle_to_index(pool_hdl);
>>         pool  = get_pool_entry(pool_id);
>>         chunk = local_chunk[pool_id];
>> @@ -462,12 +478,12 @@ odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t
>> pool_id)
>>   void odp_buffer_free(odp_buffer_t buf)
>>   {
>>         odp_buffer_hdr_t *hdr;
>> -       odp_buffer_pool_t pool_id;
>> +       uint32_t pool_id;
>>         pool_entry_t *pool;
>>         odp_buffer_chunk_hdr_t *chunk_hdr;
>>         hdr       = odp_buf_to_hdr(buf);
>> -       pool_id   = hdr->pool;
>> +       pool_id   = pool_handle_to_index(hdr->pool);
>>         pool      = get_pool_entry(pool_id);
>>         chunk_hdr = local_chunk[pool_id];
>>   @@ -500,13 +516,15 @@ odp_buffer_pool_t odp_buffer_pool(odp_buffer_t
>> buf)
>>   }
>>     -void odp_buffer_pool_print(odp_buffer_pool_t pool_id)
>> +void odp_buffer_pool_print(odp_buffer_pool_t pool_hdl)
>>   {
>>         pool_entry_t *pool;
>>         odp_buffer_chunk_hdr_t *chunk_hdr;
>>         uint32_t i;
>> +       uint32_t pool_id;
>>   -     pool = get_pool_entry(pool_id);
>> +       pool_id = pool_handle_to_index(pool_hdl);
>> +       pool    = get_pool_entry(pool_id);
>>         printf("Pool info\n");
>>         printf("---------\n");
>>
>
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/lng-odp
>
Anders Roxell Aug. 19, 2014, 3:27 p.m. UTC | #3
On 2014-08-18 14:21, Petri Savolainen wrote:
> For consistency and easier debugging, use zero as the value of
> an invalid pool handle (in linux-generic).
> 
> Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org>
> ---
>  include/odp_buffer_pool.h                          |  2 +-
>  .../linux-generic/include/odp_buffer_internal.h    |  4 +-
>  .../include/odp_buffer_pool_internal.h             |  2 +-
>  platform/linux-generic/odp_buffer_pool.c           | 50 +++++++++++++++-------
>  4 files changed, 38 insertions(+), 20 deletions(-)
> 
> diff --git a/include/odp_buffer_pool.h b/include/odp_buffer_pool.h
> index 26d9f14..fe88898 100644
> --- a/include/odp_buffer_pool.h
> +++ b/include/odp_buffer_pool.h
> @@ -27,7 +27,7 @@ extern "C" {
>  #define ODP_BUFFER_POOL_NAME_LEN  32
>  
>  /** Invalid buffer pool */
> -#define ODP_BUFFER_POOL_INVALID  (0xffffffff)
> +#define ODP_BUFFER_POOL_INVALID   0
>  
>  /** ODP buffer pool */
>  typedef uint32_t odp_buffer_pool_t;
> diff --git a/platform/linux-generic/include/odp_buffer_internal.h b/platform/linux-generic/include/odp_buffer_internal.h
> index bffd0dd..232ddb5 100644
> --- a/platform/linux-generic/include/odp_buffer_internal.h
> +++ b/platform/linux-generic/include/odp_buffer_internal.h
> @@ -48,7 +48,7 @@ typedef union odp_buffer_bits_t {
>  	odp_buffer_t handle;
>  
>  	struct {
> -		uint32_t pool:ODP_BUFFER_POOL_BITS;
> +		uint32_t pool:ODP_BUFFER_POOL_BITS;   /* pool index */

why not change the name to something more appropriate pool_idx?
need change in dpdk and ks2 as well?

>  		uint32_t index:ODP_BUFFER_INDEX_BITS;

should we add comments here as well?

>  	};
>  } odp_buffer_bits_t;
> @@ -91,7 +91,7 @@ typedef struct odp_buffer_hdr_t {
>  	odp_atomic_int_t         ref_count;  /* reference count */
>  	odp_buffer_scatter_t     scatter;    /* Scatter/gather list */
>  	int                      type;       /* type of next header */
> -	odp_buffer_pool_t        pool;       /* buffer pool */
> +	odp_buffer_pool_t        pool;       /* buffer pool handle */

maybe rename the variable to pool_hdl, you can understand its a handle?

Cheers,
Anders

>  
>  } odp_buffer_hdr_t;
>  
> diff --git a/platform/linux-generic/include/odp_buffer_pool_internal.h b/platform/linux-generic/include/odp_buffer_pool_internal.h
> index 1c0a9fc..52a507e 100644
> --- a/platform/linux-generic/include/odp_buffer_pool_internal.h
> +++ b/platform/linux-generic/include/odp_buffer_pool_internal.h
> @@ -68,7 +68,7 @@ struct pool_entry_s {
>  extern void *pool_entry_ptr[];
>  
>  
> -static inline void *get_pool_entry(odp_buffer_pool_t pool_id)
> +static inline void *get_pool_entry(uint32_t pool_id)
>  {
>  	return pool_entry_ptr[pool_id];
>  }
> diff --git a/platform/linux-generic/odp_buffer_pool.c b/platform/linux-generic/odp_buffer_pool.c
> index a48781a..10697cc 100644
> --- a/platform/linux-generic/odp_buffer_pool.c
> +++ b/platform/linux-generic/odp_buffer_pool.c
> @@ -80,13 +80,28 @@ void *pool_entry_ptr[ODP_CONFIG_BUFFER_POOLS];
>  static __thread odp_buffer_chunk_hdr_t *local_chunk[ODP_CONFIG_BUFFER_POOLS];
>  
>  
> +static inline odp_buffer_pool_t pool_index_to_handle(uint32_t pool_id)
> +{
> +	return pool_id + 1;
> +}
> +
> +
> +static inline uint32_t pool_handle_to_index(odp_buffer_pool_t pool_hdl)
> +{
> +	return pool_hdl - 1;
> +}
> +
> +
>  static inline void set_handle(odp_buffer_hdr_t *hdr,
>  			      pool_entry_t *pool, uint32_t index)
>  {
> -	uint32_t pool_id = (uint32_t) pool->s.pool;
> +	odp_buffer_pool_t pool_hdl = pool->s.pool;
> +	uint32_t          pool_id  = pool_handle_to_index(pool_hdl);
>  
> -	if (pool_id > ODP_CONFIG_BUFFER_POOLS)
> -		ODP_ERR("set_handle: Bad pool id\n");
> +	if (pool_id >= ODP_CONFIG_BUFFER_POOLS) {
> +		ODP_ERR("set_handle: Bad pool handle %u\n", pool_hdl);
> +		exit(0);
> +	}
>  
>  	if (index > ODP_BUFFER_MAX_INDEX)
>  		ODP_ERR("set_handle: Bad buffer index\n");
> @@ -98,7 +113,7 @@ static inline void set_handle(odp_buffer_hdr_t *hdr,
>  
>  int odp_buffer_pool_init_global(void)
>  {
> -	odp_buffer_pool_t i;
> +	uint32_t i;
>  
>  	pool_tbl = odp_shm_reserve("odp_buffer_pools",
>  				   sizeof(pool_table_t),
> @@ -113,7 +128,7 @@ int odp_buffer_pool_init_global(void)
>  		/* init locks */
>  		pool_entry_t *pool = &pool_tbl->pool[i];
>  		LOCK_INIT(&pool->s.lock);
> -		pool->s.pool = i;
> +		pool->s.pool = pool_index_to_handle(i);
>  
>  		pool_entry_ptr[i] = pool;
>  	}
> @@ -363,9 +378,9 @@ odp_buffer_pool_t odp_buffer_pool_create(const char *name,
>  					 size_t buf_size, size_t buf_align,
>  					 int buf_type)
>  {
> -	odp_buffer_pool_t i;
> +	odp_buffer_pool_t pool_hdl = ODP_BUFFER_POOL_INVALID;
>  	pool_entry_t *pool;
> -	odp_buffer_pool_t pool_id = ODP_BUFFER_POOL_INVALID;
> +	uint32_t i;
>  
>  	for (i = 0; i < ODP_CONFIG_BUFFER_POOLS; i++) {
>  		pool = get_pool_entry(i);
> @@ -388,20 +403,20 @@ odp_buffer_pool_t odp_buffer_pool_create(const char *name,
>  
>  			UNLOCK(&pool->s.lock);
>  
> -			pool_id = i;
> +			pool_hdl = pool->s.pool;
>  			break;
>  		}
>  
>  		UNLOCK(&pool->s.lock);
>  	}
>  
> -	return pool_id;
> +	return pool_hdl;
>  }
>  
>  
>  odp_buffer_pool_t odp_buffer_pool_lookup(const char *name)
>  {
> -	odp_buffer_pool_t i;
> +	uint32_t i;
>  	pool_entry_t *pool;
>  
>  	for (i = 0; i < ODP_CONFIG_BUFFER_POOLS; i++) {
> @@ -411,7 +426,7 @@ odp_buffer_pool_t odp_buffer_pool_lookup(const char *name)
>  		if (strcmp(name, pool->s.name) == 0) {
>  			/* found it */
>  			UNLOCK(&pool->s.lock);
> -			return i;
> +			return pool->s.pool;
>  		}
>  		UNLOCK(&pool->s.lock);
>  	}
> @@ -420,11 +435,12 @@ odp_buffer_pool_t odp_buffer_pool_lookup(const char *name)
>  }
>  
>  
> -odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_id)
> +odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_hdl)
>  {
>  	pool_entry_t *pool;
>  	odp_buffer_chunk_hdr_t *chunk;
>  	odp_buffer_bits_t handle;
> +	uint32_t pool_id = pool_handle_to_index(pool_hdl);
>  
>  	pool  = get_pool_entry(pool_id);
>  	chunk = local_chunk[pool_id];
> @@ -462,12 +478,12 @@ odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_id)
>  void odp_buffer_free(odp_buffer_t buf)
>  {
>  	odp_buffer_hdr_t *hdr;
> -	odp_buffer_pool_t pool_id;
> +	uint32_t pool_id;
>  	pool_entry_t *pool;
>  	odp_buffer_chunk_hdr_t *chunk_hdr;
>  
>  	hdr       = odp_buf_to_hdr(buf);
> -	pool_id   = hdr->pool;
> +	pool_id   = pool_handle_to_index(hdr->pool);
>  	pool      = get_pool_entry(pool_id);
>  	chunk_hdr = local_chunk[pool_id];
>  
> @@ -500,13 +516,15 @@ odp_buffer_pool_t odp_buffer_pool(odp_buffer_t buf)
>  }
>  
>  
> -void odp_buffer_pool_print(odp_buffer_pool_t pool_id)
> +void odp_buffer_pool_print(odp_buffer_pool_t pool_hdl)
>  {
>  	pool_entry_t *pool;
>  	odp_buffer_chunk_hdr_t *chunk_hdr;
>  	uint32_t i;
> +	uint32_t pool_id;
>  
> -	pool = get_pool_entry(pool_id);
> +	pool_id = pool_handle_to_index(pool_hdl);
> +	pool    = get_pool_entry(pool_id);
>  
>  	printf("Pool info\n");
>  	printf("---------\n");
> -- 
> 2.0.4
> 
> 
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/lng-odp
Savolainen, Petri (NSN - FI/Espoo) Aug. 20, 2014, 7:36 a.m. UTC | #4
> -----Original Message-----
> From: ext Anders Roxell [mailto:anders.roxell@linaro.org]
> Sent: Tuesday, August 19, 2014 6:27 PM
> To: Petri Savolainen
> Cc: lng-odp@lists.linaro.org
> Subject: Re: [lng-odp] [PATCH] Change invalid buffer pool handle to
> zero
> 
> On 2014-08-18 14:21, Petri Savolainen wrote:
> > For consistency and easier debugging, use zero as the value of
> > an invalid pool handle (in linux-generic).
> >
> > Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org>
> > ---
> >  include/odp_buffer_pool.h                          |  2 +-
> >  .../linux-generic/include/odp_buffer_internal.h    |  4 +-
> >  .../include/odp_buffer_pool_internal.h             |  2 +-
> >  platform/linux-generic/odp_buffer_pool.c           | 50
> +++++++++++++++-------
> >  4 files changed, 38 insertions(+), 20 deletions(-)
> >
> > diff --git a/include/odp_buffer_pool.h b/include/odp_buffer_pool.h
> > index 26d9f14..fe88898 100644
> > --- a/include/odp_buffer_pool.h
> > +++ b/include/odp_buffer_pool.h
> > @@ -27,7 +27,7 @@ extern "C" {
> >  #define ODP_BUFFER_POOL_NAME_LEN  32
> >
> >  /** Invalid buffer pool */
> > -#define ODP_BUFFER_POOL_INVALID  (0xffffffff)
> > +#define ODP_BUFFER_POOL_INVALID   0
> >
> >  /** ODP buffer pool */
> >  typedef uint32_t odp_buffer_pool_t;
> > diff --git a/platform/linux-generic/include/odp_buffer_internal.h
> b/platform/linux-generic/include/odp_buffer_internal.h
> > index bffd0dd..232ddb5 100644
> > --- a/platform/linux-generic/include/odp_buffer_internal.h
> > +++ b/platform/linux-generic/include/odp_buffer_internal.h
> > @@ -48,7 +48,7 @@ typedef union odp_buffer_bits_t {
> >  	odp_buffer_t handle;
> >
> >  	struct {
> > -		uint32_t pool:ODP_BUFFER_POOL_BITS;
> > +		uint32_t pool:ODP_BUFFER_POOL_BITS;   /* pool index */
> 
> why not change the name to something more appropriate pool_idx?
I'll change it to pool_id. You can also see it from the type. Uint32 is index, odp_buffer_pool_t is handle.

> need change in dpdk and ks2 as well?
Don't know. Depends what they reuse from linux-generic. This is linux-generic implementation change.

> 
> >  		uint32_t index:ODP_BUFFER_INDEX_BITS;
> 
> should we add comments here as well?
Not yet, invalid buffer will be changed to zero in an another patch.

> 
> >  	};
> >  } odp_buffer_bits_t;
> > @@ -91,7 +91,7 @@ typedef struct odp_buffer_hdr_t {
> >  	odp_atomic_int_t         ref_count;  /* reference count */
> >  	odp_buffer_scatter_t     scatter;    /* Scatter/gather list */
> >  	int                      type;       /* type of next header */
> > -	odp_buffer_pool_t        pool;       /* buffer pool */
> > +	odp_buffer_pool_t        pool;       /* buffer pool handle */
> 
> maybe rename the variable to pool_hdl, you can understand its a handle?
The type tells you that.

-Petri

> 
> Cheers,
> Anders
> 
> >
> >  } odp_buffer_hdr_t;
> >
> > diff --git a/platform/linux-
> generic/include/odp_buffer_pool_internal.h b/platform/linux-
> generic/include/odp_buffer_pool_internal.h
> > index 1c0a9fc..52a507e 100644
> > --- a/platform/linux-generic/include/odp_buffer_pool_internal.h
> > +++ b/platform/linux-generic/include/odp_buffer_pool_internal.h
> > @@ -68,7 +68,7 @@ struct pool_entry_s {
> >  extern void *pool_entry_ptr[];
> >
> >
> > -static inline void *get_pool_entry(odp_buffer_pool_t pool_id)
> > +static inline void *get_pool_entry(uint32_t pool_id)
> >  {
> >  	return pool_entry_ptr[pool_id];
> >  }
> > diff --git a/platform/linux-generic/odp_buffer_pool.c
> b/platform/linux-generic/odp_buffer_pool.c
> > index a48781a..10697cc 100644
> > --- a/platform/linux-generic/odp_buffer_pool.c
> > +++ b/platform/linux-generic/odp_buffer_pool.c
> > @@ -80,13 +80,28 @@ void *pool_entry_ptr[ODP_CONFIG_BUFFER_POOLS];
> >  static __thread odp_buffer_chunk_hdr_t
> *local_chunk[ODP_CONFIG_BUFFER_POOLS];
> >
> >
> > +static inline odp_buffer_pool_t pool_index_to_handle(uint32_t
> pool_id)
> > +{
> > +	return pool_id + 1;
> > +}
> > +
> > +
> > +static inline uint32_t pool_handle_to_index(odp_buffer_pool_t
> pool_hdl)
> > +{
> > +	return pool_hdl - 1;
> > +}
> > +
> > +
> >  static inline void set_handle(odp_buffer_hdr_t *hdr,
> >  			      pool_entry_t *pool, uint32_t index)
> >  {
> > -	uint32_t pool_id = (uint32_t) pool->s.pool;
> > +	odp_buffer_pool_t pool_hdl = pool->s.pool;
> > +	uint32_t          pool_id  = pool_handle_to_index(pool_hdl);
> >
> > -	if (pool_id > ODP_CONFIG_BUFFER_POOLS)
> > -		ODP_ERR("set_handle: Bad pool id\n");
> > +	if (pool_id >= ODP_CONFIG_BUFFER_POOLS) {
> > +		ODP_ERR("set_handle: Bad pool handle %u\n", pool_hdl);
> > +		exit(0);
> > +	}
> >
> >  	if (index > ODP_BUFFER_MAX_INDEX)
> >  		ODP_ERR("set_handle: Bad buffer index\n");
> > @@ -98,7 +113,7 @@ static inline void set_handle(odp_buffer_hdr_t
> *hdr,
> >
> >  int odp_buffer_pool_init_global(void)
> >  {
> > -	odp_buffer_pool_t i;
> > +	uint32_t i;
> >
> >  	pool_tbl = odp_shm_reserve("odp_buffer_pools",
> >  				   sizeof(pool_table_t),
> > @@ -113,7 +128,7 @@ int odp_buffer_pool_init_global(void)
> >  		/* init locks */
> >  		pool_entry_t *pool = &pool_tbl->pool[i];
> >  		LOCK_INIT(&pool->s.lock);
> > -		pool->s.pool = i;
> > +		pool->s.pool = pool_index_to_handle(i);
> >
> >  		pool_entry_ptr[i] = pool;
> >  	}
> > @@ -363,9 +378,9 @@ odp_buffer_pool_t odp_buffer_pool_create(const
> char *name,
> >  					 size_t buf_size, size_t buf_align,
> >  					 int buf_type)
> >  {
> > -	odp_buffer_pool_t i;
> > +	odp_buffer_pool_t pool_hdl = ODP_BUFFER_POOL_INVALID;
> >  	pool_entry_t *pool;
> > -	odp_buffer_pool_t pool_id = ODP_BUFFER_POOL_INVALID;
> > +	uint32_t i;
> >
> >  	for (i = 0; i < ODP_CONFIG_BUFFER_POOLS; i++) {
> >  		pool = get_pool_entry(i);
> > @@ -388,20 +403,20 @@ odp_buffer_pool_t odp_buffer_pool_create(const
> char *name,
> >
> >  			UNLOCK(&pool->s.lock);
> >
> > -			pool_id = i;
> > +			pool_hdl = pool->s.pool;
> >  			break;
> >  		}
> >
> >  		UNLOCK(&pool->s.lock);
> >  	}
> >
> > -	return pool_id;
> > +	return pool_hdl;
> >  }
> >
> >
> >  odp_buffer_pool_t odp_buffer_pool_lookup(const char *name)
> >  {
> > -	odp_buffer_pool_t i;
> > +	uint32_t i;
> >  	pool_entry_t *pool;
> >
> >  	for (i = 0; i < ODP_CONFIG_BUFFER_POOLS; i++) {
> > @@ -411,7 +426,7 @@ odp_buffer_pool_t odp_buffer_pool_lookup(const
> char *name)
> >  		if (strcmp(name, pool->s.name) == 0) {
> >  			/* found it */
> >  			UNLOCK(&pool->s.lock);
> > -			return i;
> > +			return pool->s.pool;
> >  		}
> >  		UNLOCK(&pool->s.lock);
> >  	}
> > @@ -420,11 +435,12 @@ odp_buffer_pool_t odp_buffer_pool_lookup(const
> char *name)
> >  }
> >
> >
> > -odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_id)
> > +odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_hdl)
> >  {
> >  	pool_entry_t *pool;
> >  	odp_buffer_chunk_hdr_t *chunk;
> >  	odp_buffer_bits_t handle;
> > +	uint32_t pool_id = pool_handle_to_index(pool_hdl);
> >
> >  	pool  = get_pool_entry(pool_id);
> >  	chunk = local_chunk[pool_id];
> > @@ -462,12 +478,12 @@ odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t
> pool_id)
> >  void odp_buffer_free(odp_buffer_t buf)
> >  {
> >  	odp_buffer_hdr_t *hdr;
> > -	odp_buffer_pool_t pool_id;
> > +	uint32_t pool_id;
> >  	pool_entry_t *pool;
> >  	odp_buffer_chunk_hdr_t *chunk_hdr;
> >
> >  	hdr       = odp_buf_to_hdr(buf);
> > -	pool_id   = hdr->pool;
> > +	pool_id   = pool_handle_to_index(hdr->pool);
> >  	pool      = get_pool_entry(pool_id);
> >  	chunk_hdr = local_chunk[pool_id];
> >
> > @@ -500,13 +516,15 @@ odp_buffer_pool_t odp_buffer_pool(odp_buffer_t
> buf)
> >  }
> >
> >
> > -void odp_buffer_pool_print(odp_buffer_pool_t pool_id)
> > +void odp_buffer_pool_print(odp_buffer_pool_t pool_hdl)
> >  {
> >  	pool_entry_t *pool;
> >  	odp_buffer_chunk_hdr_t *chunk_hdr;
> >  	uint32_t i;
> > +	uint32_t pool_id;
> >
> > -	pool = get_pool_entry(pool_id);
> > +	pool_id = pool_handle_to_index(pool_hdl);
> > +	pool    = get_pool_entry(pool_id);
> >
> >  	printf("Pool info\n");
> >  	printf("---------\n");
> > --
> > 2.0.4
> >
> >
> > _______________________________________________
> > lng-odp mailing list
> > lng-odp@lists.linaro.org
> > http://lists.linaro.org/mailman/listinfo/lng-odp
Anders Roxell Aug. 20, 2014, 7:48 p.m. UTC | #5
Oops, I was to slow, will comment in your v2 patch.

Sorry for that!

Cheers,
Anders

On 2014-08-20 07:36, Savolainen, Petri (NSN - FI/Espoo) wrote:
> 
> 
> > -----Original Message-----
> > From: ext Anders Roxell [mailto:anders.roxell@linaro.org]
> > Sent: Tuesday, August 19, 2014 6:27 PM
> > To: Petri Savolainen
> > Cc: lng-odp@lists.linaro.org
> > Subject: Re: [lng-odp] [PATCH] Change invalid buffer pool handle to
> > zero
> > 
> > On 2014-08-18 14:21, Petri Savolainen wrote:
> > > For consistency and easier debugging, use zero as the value of
> > > an invalid pool handle (in linux-generic).
> > >
> > > Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org>
> > > ---
> > >  include/odp_buffer_pool.h                          |  2 +-
> > >  .../linux-generic/include/odp_buffer_internal.h    |  4 +-
> > >  .../include/odp_buffer_pool_internal.h             |  2 +-
> > >  platform/linux-generic/odp_buffer_pool.c           | 50
> > +++++++++++++++-------
> > >  4 files changed, 38 insertions(+), 20 deletions(-)
> > >
> > > diff --git a/include/odp_buffer_pool.h b/include/odp_buffer_pool.h
> > > index 26d9f14..fe88898 100644
> > > --- a/include/odp_buffer_pool.h
> > > +++ b/include/odp_buffer_pool.h
> > > @@ -27,7 +27,7 @@ extern "C" {
> > >  #define ODP_BUFFER_POOL_NAME_LEN  32
> > >
> > >  /** Invalid buffer pool */
> > > -#define ODP_BUFFER_POOL_INVALID  (0xffffffff)
> > > +#define ODP_BUFFER_POOL_INVALID   0
> > >
> > >  /** ODP buffer pool */
> > >  typedef uint32_t odp_buffer_pool_t;
> > > diff --git a/platform/linux-generic/include/odp_buffer_internal.h
> > b/platform/linux-generic/include/odp_buffer_internal.h
> > > index bffd0dd..232ddb5 100644
> > > --- a/platform/linux-generic/include/odp_buffer_internal.h
> > > +++ b/platform/linux-generic/include/odp_buffer_internal.h
> > > @@ -48,7 +48,7 @@ typedef union odp_buffer_bits_t {
> > >  	odp_buffer_t handle;
> > >
> > >  	struct {
> > > -		uint32_t pool:ODP_BUFFER_POOL_BITS;
> > > +		uint32_t pool:ODP_BUFFER_POOL_BITS;   /* pool index */
> > 
> > why not change the name to something more appropriate pool_idx?
> I'll change it to pool_id. You can also see it from the type. Uint32 is index, odp_buffer_pool_t is handle.
> 
> > need change in dpdk and ks2 as well?
> Don't know. Depends what they reuse from linux-generic. This is linux-generic implementation change.
> 
> > 
> > >  		uint32_t index:ODP_BUFFER_INDEX_BITS;
> > 
> > should we add comments here as well?
> Not yet, invalid buffer will be changed to zero in an another patch.
> 
> > 
> > >  	};
> > >  } odp_buffer_bits_t;
> > > @@ -91,7 +91,7 @@ typedef struct odp_buffer_hdr_t {
> > >  	odp_atomic_int_t         ref_count;  /* reference count */
> > >  	odp_buffer_scatter_t     scatter;    /* Scatter/gather list */
> > >  	int                      type;       /* type of next header */
> > > -	odp_buffer_pool_t        pool;       /* buffer pool */
> > > +	odp_buffer_pool_t        pool;       /* buffer pool handle */
> > 
> > maybe rename the variable to pool_hdl, you can understand its a handle?
> The type tells you that.
> 
> -Petri
> 
> > 
> > Cheers,
> > Anders
> > 
> > >
> > >  } odp_buffer_hdr_t;
> > >
> > > diff --git a/platform/linux-
> > generic/include/odp_buffer_pool_internal.h b/platform/linux-
> > generic/include/odp_buffer_pool_internal.h
> > > index 1c0a9fc..52a507e 100644
> > > --- a/platform/linux-generic/include/odp_buffer_pool_internal.h
> > > +++ b/platform/linux-generic/include/odp_buffer_pool_internal.h
> > > @@ -68,7 +68,7 @@ struct pool_entry_s {
> > >  extern void *pool_entry_ptr[];
> > >
> > >
> > > -static inline void *get_pool_entry(odp_buffer_pool_t pool_id)
> > > +static inline void *get_pool_entry(uint32_t pool_id)
> > >  {
> > >  	return pool_entry_ptr[pool_id];
> > >  }
> > > diff --git a/platform/linux-generic/odp_buffer_pool.c
> > b/platform/linux-generic/odp_buffer_pool.c
> > > index a48781a..10697cc 100644
> > > --- a/platform/linux-generic/odp_buffer_pool.c
> > > +++ b/platform/linux-generic/odp_buffer_pool.c
> > > @@ -80,13 +80,28 @@ void *pool_entry_ptr[ODP_CONFIG_BUFFER_POOLS];
> > >  static __thread odp_buffer_chunk_hdr_t
> > *local_chunk[ODP_CONFIG_BUFFER_POOLS];
> > >
> > >
> > > +static inline odp_buffer_pool_t pool_index_to_handle(uint32_t
> > pool_id)
> > > +{
> > > +	return pool_id + 1;
> > > +}
> > > +
> > > +
> > > +static inline uint32_t pool_handle_to_index(odp_buffer_pool_t
> > pool_hdl)
> > > +{
> > > +	return pool_hdl - 1;
> > > +}
> > > +
> > > +
> > >  static inline void set_handle(odp_buffer_hdr_t *hdr,
> > >  			      pool_entry_t *pool, uint32_t index)
> > >  {
> > > -	uint32_t pool_id = (uint32_t) pool->s.pool;
> > > +	odp_buffer_pool_t pool_hdl = pool->s.pool;
> > > +	uint32_t          pool_id  = pool_handle_to_index(pool_hdl);
> > >
> > > -	if (pool_id > ODP_CONFIG_BUFFER_POOLS)
> > > -		ODP_ERR("set_handle: Bad pool id\n");
> > > +	if (pool_id >= ODP_CONFIG_BUFFER_POOLS) {
> > > +		ODP_ERR("set_handle: Bad pool handle %u\n", pool_hdl);
> > > +		exit(0);
> > > +	}
> > >
> > >  	if (index > ODP_BUFFER_MAX_INDEX)
> > >  		ODP_ERR("set_handle: Bad buffer index\n");
> > > @@ -98,7 +113,7 @@ static inline void set_handle(odp_buffer_hdr_t
> > *hdr,
> > >
> > >  int odp_buffer_pool_init_global(void)
> > >  {
> > > -	odp_buffer_pool_t i;
> > > +	uint32_t i;
> > >
> > >  	pool_tbl = odp_shm_reserve("odp_buffer_pools",
> > >  				   sizeof(pool_table_t),
> > > @@ -113,7 +128,7 @@ int odp_buffer_pool_init_global(void)
> > >  		/* init locks */
> > >  		pool_entry_t *pool = &pool_tbl->pool[i];
> > >  		LOCK_INIT(&pool->s.lock);
> > > -		pool->s.pool = i;
> > > +		pool->s.pool = pool_index_to_handle(i);
> > >
> > >  		pool_entry_ptr[i] = pool;
> > >  	}
> > > @@ -363,9 +378,9 @@ odp_buffer_pool_t odp_buffer_pool_create(const
> > char *name,
> > >  					 size_t buf_size, size_t buf_align,
> > >  					 int buf_type)
> > >  {
> > > -	odp_buffer_pool_t i;
> > > +	odp_buffer_pool_t pool_hdl = ODP_BUFFER_POOL_INVALID;
> > >  	pool_entry_t *pool;
> > > -	odp_buffer_pool_t pool_id = ODP_BUFFER_POOL_INVALID;
> > > +	uint32_t i;
> > >
> > >  	for (i = 0; i < ODP_CONFIG_BUFFER_POOLS; i++) {
> > >  		pool = get_pool_entry(i);
> > > @@ -388,20 +403,20 @@ odp_buffer_pool_t odp_buffer_pool_create(const
> > char *name,
> > >
> > >  			UNLOCK(&pool->s.lock);
> > >
> > > -			pool_id = i;
> > > +			pool_hdl = pool->s.pool;
> > >  			break;
> > >  		}
> > >
> > >  		UNLOCK(&pool->s.lock);
> > >  	}
> > >
> > > -	return pool_id;
> > > +	return pool_hdl;
> > >  }
> > >
> > >
> > >  odp_buffer_pool_t odp_buffer_pool_lookup(const char *name)
> > >  {
> > > -	odp_buffer_pool_t i;
> > > +	uint32_t i;
> > >  	pool_entry_t *pool;
> > >
> > >  	for (i = 0; i < ODP_CONFIG_BUFFER_POOLS; i++) {
> > > @@ -411,7 +426,7 @@ odp_buffer_pool_t odp_buffer_pool_lookup(const
> > char *name)
> > >  		if (strcmp(name, pool->s.name) == 0) {
> > >  			/* found it */
> > >  			UNLOCK(&pool->s.lock);
> > > -			return i;
> > > +			return pool->s.pool;
> > >  		}
> > >  		UNLOCK(&pool->s.lock);
> > >  	}
> > > @@ -420,11 +435,12 @@ odp_buffer_pool_t odp_buffer_pool_lookup(const
> > char *name)
> > >  }
> > >
> > >
> > > -odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_id)
> > > +odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_hdl)
> > >  {
> > >  	pool_entry_t *pool;
> > >  	odp_buffer_chunk_hdr_t *chunk;
> > >  	odp_buffer_bits_t handle;
> > > +	uint32_t pool_id = pool_handle_to_index(pool_hdl);
> > >
> > >  	pool  = get_pool_entry(pool_id);
> > >  	chunk = local_chunk[pool_id];
> > > @@ -462,12 +478,12 @@ odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t
> > pool_id)
> > >  void odp_buffer_free(odp_buffer_t buf)
> > >  {
> > >  	odp_buffer_hdr_t *hdr;
> > > -	odp_buffer_pool_t pool_id;
> > > +	uint32_t pool_id;
> > >  	pool_entry_t *pool;
> > >  	odp_buffer_chunk_hdr_t *chunk_hdr;
> > >
> > >  	hdr       = odp_buf_to_hdr(buf);
> > > -	pool_id   = hdr->pool;
> > > +	pool_id   = pool_handle_to_index(hdr->pool);
> > >  	pool      = get_pool_entry(pool_id);
> > >  	chunk_hdr = local_chunk[pool_id];
> > >
> > > @@ -500,13 +516,15 @@ odp_buffer_pool_t odp_buffer_pool(odp_buffer_t
> > buf)
> > >  }
> > >
> > >
> > > -void odp_buffer_pool_print(odp_buffer_pool_t pool_id)
> > > +void odp_buffer_pool_print(odp_buffer_pool_t pool_hdl)
> > >  {
> > >  	pool_entry_t *pool;
> > >  	odp_buffer_chunk_hdr_t *chunk_hdr;
> > >  	uint32_t i;
> > > +	uint32_t pool_id;
> > >
> > > -	pool = get_pool_entry(pool_id);
> > > +	pool_id = pool_handle_to_index(pool_hdl);
> > > +	pool    = get_pool_entry(pool_id);
> > >
> > >  	printf("Pool info\n");
> > >  	printf("---------\n");
> > > --
> > > 2.0.4
> > >
> > >
> > > _______________________________________________
> > > lng-odp mailing list
> > > lng-odp@lists.linaro.org
> > > http://lists.linaro.org/mailman/listinfo/lng-odp
diff mbox

Patch

diff --git a/include/odp_buffer_pool.h b/include/odp_buffer_pool.h
index 26d9f14..fe88898 100644
--- a/include/odp_buffer_pool.h
+++ b/include/odp_buffer_pool.h
@@ -27,7 +27,7 @@  extern "C" {
 #define ODP_BUFFER_POOL_NAME_LEN  32
 
 /** Invalid buffer pool */
-#define ODP_BUFFER_POOL_INVALID  (0xffffffff)
+#define ODP_BUFFER_POOL_INVALID   0
 
 /** ODP buffer pool */
 typedef uint32_t odp_buffer_pool_t;
diff --git a/platform/linux-generic/include/odp_buffer_internal.h b/platform/linux-generic/include/odp_buffer_internal.h
index bffd0dd..232ddb5 100644
--- a/platform/linux-generic/include/odp_buffer_internal.h
+++ b/platform/linux-generic/include/odp_buffer_internal.h
@@ -48,7 +48,7 @@  typedef union odp_buffer_bits_t {
 	odp_buffer_t handle;
 
 	struct {
-		uint32_t pool:ODP_BUFFER_POOL_BITS;
+		uint32_t pool:ODP_BUFFER_POOL_BITS;   /* pool index */
 		uint32_t index:ODP_BUFFER_INDEX_BITS;
 	};
 } odp_buffer_bits_t;
@@ -91,7 +91,7 @@  typedef struct odp_buffer_hdr_t {
 	odp_atomic_int_t         ref_count;  /* reference count */
 	odp_buffer_scatter_t     scatter;    /* Scatter/gather list */
 	int                      type;       /* type of next header */
-	odp_buffer_pool_t        pool;       /* buffer pool */
+	odp_buffer_pool_t        pool;       /* buffer pool handle */
 
 } odp_buffer_hdr_t;
 
diff --git a/platform/linux-generic/include/odp_buffer_pool_internal.h b/platform/linux-generic/include/odp_buffer_pool_internal.h
index 1c0a9fc..52a507e 100644
--- a/platform/linux-generic/include/odp_buffer_pool_internal.h
+++ b/platform/linux-generic/include/odp_buffer_pool_internal.h
@@ -68,7 +68,7 @@  struct pool_entry_s {
 extern void *pool_entry_ptr[];
 
 
-static inline void *get_pool_entry(odp_buffer_pool_t pool_id)
+static inline void *get_pool_entry(uint32_t pool_id)
 {
 	return pool_entry_ptr[pool_id];
 }
diff --git a/platform/linux-generic/odp_buffer_pool.c b/platform/linux-generic/odp_buffer_pool.c
index a48781a..10697cc 100644
--- a/platform/linux-generic/odp_buffer_pool.c
+++ b/platform/linux-generic/odp_buffer_pool.c
@@ -80,13 +80,28 @@  void *pool_entry_ptr[ODP_CONFIG_BUFFER_POOLS];
 static __thread odp_buffer_chunk_hdr_t *local_chunk[ODP_CONFIG_BUFFER_POOLS];
 
 
+static inline odp_buffer_pool_t pool_index_to_handle(uint32_t pool_id)
+{
+	return pool_id + 1;
+}
+
+
+static inline uint32_t pool_handle_to_index(odp_buffer_pool_t pool_hdl)
+{
+	return pool_hdl - 1;
+}
+
+
 static inline void set_handle(odp_buffer_hdr_t *hdr,
 			      pool_entry_t *pool, uint32_t index)
 {
-	uint32_t pool_id = (uint32_t) pool->s.pool;
+	odp_buffer_pool_t pool_hdl = pool->s.pool;
+	uint32_t          pool_id  = pool_handle_to_index(pool_hdl);
 
-	if (pool_id > ODP_CONFIG_BUFFER_POOLS)
-		ODP_ERR("set_handle: Bad pool id\n");
+	if (pool_id >= ODP_CONFIG_BUFFER_POOLS) {
+		ODP_ERR("set_handle: Bad pool handle %u\n", pool_hdl);
+		exit(0);
+	}
 
 	if (index > ODP_BUFFER_MAX_INDEX)
 		ODP_ERR("set_handle: Bad buffer index\n");
@@ -98,7 +113,7 @@  static inline void set_handle(odp_buffer_hdr_t *hdr,
 
 int odp_buffer_pool_init_global(void)
 {
-	odp_buffer_pool_t i;
+	uint32_t i;
 
 	pool_tbl = odp_shm_reserve("odp_buffer_pools",
 				   sizeof(pool_table_t),
@@ -113,7 +128,7 @@  int odp_buffer_pool_init_global(void)
 		/* init locks */
 		pool_entry_t *pool = &pool_tbl->pool[i];
 		LOCK_INIT(&pool->s.lock);
-		pool->s.pool = i;
+		pool->s.pool = pool_index_to_handle(i);
 
 		pool_entry_ptr[i] = pool;
 	}
@@ -363,9 +378,9 @@  odp_buffer_pool_t odp_buffer_pool_create(const char *name,
 					 size_t buf_size, size_t buf_align,
 					 int buf_type)
 {
-	odp_buffer_pool_t i;
+	odp_buffer_pool_t pool_hdl = ODP_BUFFER_POOL_INVALID;
 	pool_entry_t *pool;
-	odp_buffer_pool_t pool_id = ODP_BUFFER_POOL_INVALID;
+	uint32_t i;
 
 	for (i = 0; i < ODP_CONFIG_BUFFER_POOLS; i++) {
 		pool = get_pool_entry(i);
@@ -388,20 +403,20 @@  odp_buffer_pool_t odp_buffer_pool_create(const char *name,
 
 			UNLOCK(&pool->s.lock);
 
-			pool_id = i;
+			pool_hdl = pool->s.pool;
 			break;
 		}
 
 		UNLOCK(&pool->s.lock);
 	}
 
-	return pool_id;
+	return pool_hdl;
 }
 
 
 odp_buffer_pool_t odp_buffer_pool_lookup(const char *name)
 {
-	odp_buffer_pool_t i;
+	uint32_t i;
 	pool_entry_t *pool;
 
 	for (i = 0; i < ODP_CONFIG_BUFFER_POOLS; i++) {
@@ -411,7 +426,7 @@  odp_buffer_pool_t odp_buffer_pool_lookup(const char *name)
 		if (strcmp(name, pool->s.name) == 0) {
 			/* found it */
 			UNLOCK(&pool->s.lock);
-			return i;
+			return pool->s.pool;
 		}
 		UNLOCK(&pool->s.lock);
 	}
@@ -420,11 +435,12 @@  odp_buffer_pool_t odp_buffer_pool_lookup(const char *name)
 }
 
 
-odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_id)
+odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_hdl)
 {
 	pool_entry_t *pool;
 	odp_buffer_chunk_hdr_t *chunk;
 	odp_buffer_bits_t handle;
+	uint32_t pool_id = pool_handle_to_index(pool_hdl);
 
 	pool  = get_pool_entry(pool_id);
 	chunk = local_chunk[pool_id];
@@ -462,12 +478,12 @@  odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_id)
 void odp_buffer_free(odp_buffer_t buf)
 {
 	odp_buffer_hdr_t *hdr;
-	odp_buffer_pool_t pool_id;
+	uint32_t pool_id;
 	pool_entry_t *pool;
 	odp_buffer_chunk_hdr_t *chunk_hdr;
 
 	hdr       = odp_buf_to_hdr(buf);
-	pool_id   = hdr->pool;
+	pool_id   = pool_handle_to_index(hdr->pool);
 	pool      = get_pool_entry(pool_id);
 	chunk_hdr = local_chunk[pool_id];
 
@@ -500,13 +516,15 @@  odp_buffer_pool_t odp_buffer_pool(odp_buffer_t buf)
 }
 
 
-void odp_buffer_pool_print(odp_buffer_pool_t pool_id)
+void odp_buffer_pool_print(odp_buffer_pool_t pool_hdl)
 {
 	pool_entry_t *pool;
 	odp_buffer_chunk_hdr_t *chunk_hdr;
 	uint32_t i;
+	uint32_t pool_id;
 
-	pool = get_pool_entry(pool_id);
+	pool_id = pool_handle_to_index(pool_hdl);
+	pool    = get_pool_entry(pool_id);
 
 	printf("Pool info\n");
 	printf("---------\n");