aboutsummaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@linaro.org>2014-08-26 14:37:12 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2014-08-26 16:09:14 +0400
commitf27005786b738813bf253419312f5ade4c04f4d7 (patch)
tree8fa6312b1cd22ad5c4fea594f9f8aba9120a40a3 /platform
parent56d31a07a20bacc1d9d81eed8a3c77521f77fdac (diff)
Change invalid buffer pool handle to zero
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> Reviewed-by: Anders Roxell <anders.roxell@linaro.org>
Diffstat (limited to 'platform')
-rw-r--r--platform/linux-generic/include/api/odp_buffer_pool.h2
-rw-r--r--platform/linux-generic/include/odp_buffer_internal.h4
-rw-r--r--platform/linux-generic/include/odp_buffer_pool_internal.h6
-rw-r--r--platform/linux-generic/odp_buffer.c2
-rw-r--r--platform/linux-generic/odp_buffer_pool.c68
5 files changed, 50 insertions, 32 deletions
diff --git a/platform/linux-generic/include/api/odp_buffer_pool.h b/platform/linux-generic/include/api/odp_buffer_pool.h
index 26d9f14ae..fe88898f2 100644
--- a/platform/linux-generic/include/api/odp_buffer_pool.h
+++ b/platform/linux-generic/include/api/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 bffd0dd4a..2002b512a 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_id:ODP_BUFFER_POOL_BITS;
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_hdl; /* 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 1c0a9fcbe..e0210bdd2 100644
--- a/platform/linux-generic/include/odp_buffer_pool_internal.h
+++ b/platform/linux-generic/include/odp_buffer_pool_internal.h
@@ -51,7 +51,7 @@ struct pool_entry_s {
uint64_t free_bufs;
char name[ODP_BUFFER_POOL_NAME_LEN];
- odp_buffer_pool_t pool ODP_ALIGNED_CACHE;
+ odp_buffer_pool_t pool_hdl ODP_ALIGNED_CACHE;
uintptr_t buf_base;
size_t buf_size;
size_t buf_offset;
@@ -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];
}
@@ -83,7 +83,7 @@ static inline odp_buffer_hdr_t *odp_buf_to_hdr(odp_buffer_t buf)
odp_buffer_hdr_t *hdr;
handle.u32 = buf;
- pool_id = handle.pool;
+ pool_id = handle.pool_id;
index = handle.index;
#ifdef POOL_ERROR_CHECK
diff --git a/platform/linux-generic/odp_buffer.c b/platform/linux-generic/odp_buffer.c
index 0169eec71..e54e0e787 100644
--- a/platform/linux-generic/odp_buffer.c
+++ b/platform/linux-generic/odp_buffer.c
@@ -61,7 +61,7 @@ int odp_buffer_snprint(char *str, size_t n, odp_buffer_t buf)
len += snprintf(&str[len], n-len,
"Buffer\n");
len += snprintf(&str[len], n-len,
- " pool %i\n", hdr->pool);
+ " pool %i\n", hdr->pool_hdl);
len += snprintf(&str[len], n-len,
" index %"PRIu32"\n", hdr->index);
len += snprintf(&str[len], n-len,
diff --git a/platform/linux-generic/odp_buffer_pool.c b/platform/linux-generic/odp_buffer_pool.c
index a48781a17..e538f048c 100644
--- a/platform/linux-generic/odp_buffer_pool.c
+++ b/platform/linux-generic/odp_buffer_pool.c
@@ -80,25 +80,40 @@ 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_hdl;
+ 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");
- hdr->handle.pool = pool_id;
- hdr->handle.index = index;
+ hdr->handle.pool_id = pool_id;
+ hdr->handle.index = index;
}
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_hdl = pool_index_to_handle(i);
pool_entry_ptr[i] = pool;
}
@@ -257,11 +272,11 @@ static void fill_hdr(void *ptr, pool_entry_t *pool, uint32_t index,
set_handle(hdr, pool, index);
- hdr->addr = &buf_data[pool->s.buf_offset - pool->s.hdr_size];
- hdr->index = index;
- hdr->size = pool->s.user_size;
- hdr->pool = pool->s.pool;
- hdr->type = buf_type;
+ hdr->addr = &buf_data[pool->s.buf_offset - pool->s.hdr_size];
+ hdr->index = index;
+ hdr->size = pool->s.user_size;
+ hdr->pool_hdl = pool->s.pool_hdl;
+ hdr->type = buf_type;
check_align(pool, hdr);
}
@@ -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_hdl;
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_hdl;
}
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_hdl);
pool = get_pool_entry(pool_id);
chunk_hdr = local_chunk[pool_id];
@@ -496,21 +512,23 @@ odp_buffer_pool_t odp_buffer_pool(odp_buffer_t buf)
odp_buffer_hdr_t *hdr;
hdr = odp_buf_to_hdr(buf);
- return hdr->pool;
+ return hdr->pool_hdl;
}
-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");
- printf(" pool %i\n", pool->s.pool);
+ printf(" pool %i\n", pool->s.pool_hdl);
printf(" name %s\n", pool->s.name);
printf(" pool base %p\n", pool->s.pool_base_addr);
printf(" buf base 0x%"PRIxPTR"\n", pool->s.buf_base);