aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/odp_pool.c
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linux-generic/odp_pool.c')
-rw-r--r--platform/linux-generic/odp_pool.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/platform/linux-generic/odp_pool.c b/platform/linux-generic/odp_pool.c
index ca696fc96..cca2d55f0 100644
--- a/platform/linux-generic/odp_pool.c
+++ b/platform/linux-generic/odp_pool.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2013-2018, Linaro Limited
- * Copyright (c) 2019-2021, Nokia
+ * Copyright (c) 2019-2022, Nokia
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
@@ -47,6 +47,9 @@
/* Define a practical limit for contiguous memory allocations */
#define MAX_SIZE (10 * 1024 * 1024)
+/* Maximum packet user area size */
+#define MAX_UAREA_SIZE 2048
+
ODP_STATIC_ASSERT(CONFIG_PACKET_SEG_LEN_MIN >= 256,
"ODP Segment size must be a minimum of 256 bytes");
@@ -419,7 +422,7 @@ static pool_t *reserve_pool(uint32_t shmflags, uint8_t pool_ext, uint32_t num)
return NULL;
}
-static void init_event_hdr(pool_t *pool, _odp_event_hdr_t *event_hdr, uint32_t buf_index,
+static void init_event_hdr(pool_t *pool, _odp_event_hdr_t *event_hdr, uint32_t event_index,
uint32_t hdr_len, uint8_t *data_ptr, void *uarea)
{
odp_pool_type_t type = pool->type;
@@ -429,12 +432,10 @@ static void init_event_hdr(pool_t *pool, _odp_event_hdr_t *event_hdr, uint32_t b
/* Initialize common event metadata */
event_hdr->index.u32 = 0;
event_hdr->index.pool = pool->pool_idx;
- event_hdr->index.buffer = buf_index;
+ event_hdr->index.event = event_index;
event_hdr->type = type;
event_hdr->event_type = type;
event_hdr->pool_ptr = pool;
- event_hdr->uarea_addr = uarea;
- odp_atomic_init_u32(&event_hdr->ref_cnt, 0);
/* Store base values for fast init */
if (type == ODP_POOL_BUFFER || type == ODP_POOL_PACKET) {
@@ -446,10 +447,14 @@ static void init_event_hdr(pool_t *pool, _odp_event_hdr_t *event_hdr, uint32_t b
if (type == ODP_POOL_PACKET) {
odp_packet_hdr_t *pkt_hdr = (void *)event_hdr;
+ pkt_hdr->user_ptr = NULL;
+ pkt_hdr->uarea_addr = uarea;
pkt_hdr->seg_data = data_ptr;
pkt_hdr->seg_len = pool->seg_len;
pkt_hdr->seg_count = 1;
pkt_hdr->seg_next = NULL;
+
+ odp_atomic_init_u32(&pkt_hdr->ref_cnt, 0);
}
/* Initialize event vector metadata */
@@ -1388,7 +1393,7 @@ int odp_pool_capability(odp_pool_capability_t *capa)
capa->pkt.max_segs_per_pkt = PKT_MAX_SEGS;
capa->pkt.min_seg_len = CONFIG_PACKET_SEG_LEN_MIN;
capa->pkt.max_seg_len = max_seg_len;
- capa->pkt.max_uarea_size = MAX_SIZE;
+ capa->pkt.max_uarea_size = MAX_UAREA_SIZE;
capa->pkt.min_cache_size = 0;
capa->pkt.max_cache_size = CONFIG_POOL_CACHE_MAX_SIZE;
capa->pkt.stats.all = supported_stats.all;
@@ -1634,7 +1639,7 @@ int _odp_event_is_valid(odp_event_t event)
if (pool != event_hdr->pool_ptr)
return 0;
- if (event_hdr->index.buffer >= (pool->num + pool->skipped_blocks))
+ if (event_hdr->index.event >= (pool->num + pool->skipped_blocks))
return 0;
return 1;
@@ -1682,7 +1687,7 @@ int odp_pool_ext_capability(odp_pool_type_t type, odp_pool_ext_capability_t *cap
capa->pkt.max_headroom = CONFIG_PACKET_HEADROOM;
capa->pkt.max_headroom_size = CONFIG_PACKET_HEADROOM;
capa->pkt.max_segs_per_pkt = PKT_MAX_SEGS;
- capa->pkt.max_uarea_size = MAX_SIZE;
+ capa->pkt.max_uarea_size = MAX_UAREA_SIZE;
return 0;
}