From: Matias Elo <matias....@nokia.com>

Data size is constant for all buffers from the same pool, so there is no
need to store the value in the buffer header.

Signed-off-by: Matias Elo <matias....@nokia.com>
Reviewed-by: Bill Fischofer <bill.fischo...@linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uva...@linaro.org>
---
/** Email created from pull request 301 (muvarov:api-next)
 ** https://github.com/Linaro/odp/pull/301
 ** Patch: https://github.com/Linaro/odp/pull/301.patch
 ** Base sha: d4b364849c4abb4c71e0c5260e1a793ebb8dc97d
 ** Merge commit sha: 390c09cfddb8e938a4bef428fb46ce575f22c984
 **/
 platform/linux-generic/include/odp_buffer_internal.h | 3 ---
 platform/linux-generic/include/odp_pool_internal.h   | 1 +
 platform/linux-generic/odp_buffer.c                  | 5 +++--
 platform/linux-generic/odp_packet.c                  | 6 ++++--
 platform/linux-generic/odp_pool.c                    | 5 +----
 5 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/platform/linux-generic/include/odp_buffer_internal.h 
b/platform/linux-generic/include/odp_buffer_internal.h
index aefb13527..ac189301f 100644
--- a/platform/linux-generic/include/odp_buffer_internal.h
+++ b/platform/linux-generic/include/odp_buffer_internal.h
@@ -107,9 +107,6 @@ struct odp_buffer_hdr_t {
        /* User area size */
        uint32_t uarea_size;
 
-       /* Max data size */
-       uint32_t size;
-
        /* ipc mapped process can not walk over pointers,
         * offset has to be used */
        uint64_t ipc_data_offset;
diff --git a/platform/linux-generic/include/odp_pool_internal.h 
b/platform/linux-generic/include/odp_pool_internal.h
index 48945ee1d..61ec5ccc5 100644
--- a/platform/linux-generic/include/odp_pool_internal.h
+++ b/platform/linux-generic/include/odp_pool_internal.h
@@ -61,6 +61,7 @@ typedef struct pool_t {
        uint32_t         headroom;
        uint32_t         tailroom;
        uint32_t         seg_len;
+       uint32_t         max_seg_len;
        uint32_t         max_len;
        uint32_t         uarea_size;
        uint32_t         block_size;
diff --git a/platform/linux-generic/odp_buffer.c 
b/platform/linux-generic/odp_buffer.c
index 1b1484898..a0e0cd101 100644
--- a/platform/linux-generic/odp_buffer.c
+++ b/platform/linux-generic/odp_buffer.c
@@ -36,8 +36,9 @@ void *odp_buffer_addr(odp_buffer_t buf)
 uint32_t odp_buffer_size(odp_buffer_t buf)
 {
        odp_buffer_hdr_t *hdr = buf_hdl_to_hdr(buf);
+       pool_t *pool = hdr->pool_ptr;
 
-       return hdr->size;
+       return pool->seg_len;
 }
 
 int odp_buffer_snprint(char *str, uint32_t n, odp_buffer_t buf)
@@ -62,7 +63,7 @@ int odp_buffer_snprint(char *str, uint32_t n, odp_buffer_t 
buf)
        len += snprintf(&str[len], n-len,
                        "  addr         %p\n",          hdr->seg[0].data);
        len += snprintf(&str[len], n-len,
-                       "  size         %" PRIu32 "\n", hdr->size);
+                       "  size         %" PRIu32 "\n", odp_buffer_size(buf));
        len += snprintf(&str[len], n-len,
                        "  type         %i\n",          hdr->type);
 
diff --git a/platform/linux-generic/odp_packet.c 
b/platform/linux-generic/odp_packet.c
index 68a6eef51..6d1f1bd02 100644
--- a/platform/linux-generic/odp_packet.c
+++ b/platform/linux-generic/odp_packet.c
@@ -957,8 +957,9 @@ odp_event_t odp_packet_to_event(odp_packet_t pkt)
 uint32_t odp_packet_buf_len(odp_packet_t pkt)
 {
        odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
+       pool_t *pool = pkt_hdr->buf_hdr.pool_ptr;
 
-       return pkt_hdr->buf_hdr.size * pkt_hdr->buf_hdr.segcount;
+       return pool->max_seg_len * pkt_hdr->buf_hdr.segcount;
 }
 
 void *odp_packet_tail(odp_packet_t pkt)
@@ -1404,6 +1405,7 @@ int odp_packet_align(odp_packet_t *pkt, uint32_t offset, 
uint32_t len,
        uint32_t shift;
        uint32_t seglen = 0;  /* GCC */
        odp_packet_hdr_t *pkt_hdr = packet_hdr(*pkt);
+       pool_t *pool = pkt_hdr->buf_hdr.pool_ptr;
        void *addr = packet_map(pkt_hdr, offset, &seglen, NULL);
        uint64_t uaddr = (uint64_t)(uintptr_t)addr;
        uint64_t misalign;
@@ -1420,7 +1422,7 @@ int odp_packet_align(odp_packet_t *pkt, uint32_t offset, 
uint32_t len,
                        return 0;
                shift = align - misalign;
        } else {
-               if (len > pkt_hdr->buf_hdr.size)
+               if (len > pool->max_seg_len)
                        return -1;
                shift  = len - seglen;
                uaddr -= shift;
diff --git a/platform/linux-generic/odp_pool.c 
b/platform/linux-generic/odp_pool.c
index 3e47993c7..7d7a423b5 100644
--- a/platform/linux-generic/odp_pool.c
+++ b/platform/linux-generic/odp_pool.c
@@ -236,7 +236,6 @@ static void init_buffers(pool_t *pool)
        ring_t *ring;
        uint32_t mask;
        int type;
-       uint32_t seg_size;
        uint64_t page_size;
        int skipped_blocks = 0;
 
@@ -285,11 +284,8 @@ static void init_buffers(pool_t *pool)
 
                memset(buf_hdr, 0, (uintptr_t)data - (uintptr_t)buf_hdr);
 
-               seg_size = pool->headroom + pool->seg_len + pool->tailroom;
-
                /* Initialize buffer metadata */
                buf_hdr->index = i;
-               buf_hdr->size = seg_size;
                buf_hdr->type = type;
                buf_hdr->event_type = type;
                buf_hdr->pool_hdl = pool->pool_hdl;
@@ -469,6 +465,7 @@ static odp_pool_t pool_create(const char *name, 
odp_pool_param_t *params,
        pool->align          = align;
        pool->headroom       = headroom;
        pool->seg_len        = seg_len;
+       pool->max_seg_len    = headroom + seg_len + tailroom;
        pool->max_len        = max_len;
        pool->tailroom       = tailroom;
        pool->block_size     = block_size;

Reply via email to