aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic
diff options
context:
space:
mode:
authorMatias Elo <matias.elo@nokia.com>2022-01-10 10:05:47 +0200
committerMatias Elo <matias.elo@nokia.com>2022-01-12 16:34:48 +0200
commit0ca93faa726b43a3dc006036d5f193c2297fc225 (patch)
tree62b5e2343c52bf9fc77847d512653f9b5ff9f9b8 /platform/linux-generic
parentf7f7d94eaeeaf502b13c0ea4a18fa8addfa79c22 (diff)
linux-gen: packet: move user area pointer to packet header
Move user area pointer from _odp_event_hdr_t to odp_packet_hdr_t since it's only used by packet buffers. odp_timeout_hdr_t fits now into a single cache line. Signed-off-by: Matias Elo <matias.elo@nokia.com> Reviewed-by: Petri Savolainen <petri.savolainen@nokia.com>
Diffstat (limited to 'platform/linux-generic')
-rw-r--r--platform/linux-generic/include/odp_event_internal.h3
-rw-r--r--platform/linux-generic/include/odp_packet_internal.h3
-rw-r--r--platform/linux-generic/include/odp_timer_internal.h5
-rw-r--r--platform/linux-generic/odp_packet.c10
-rw-r--r--platform/linux-generic/odp_pool.c2
5 files changed, 12 insertions, 11 deletions
diff --git a/platform/linux-generic/include/odp_event_internal.h b/platform/linux-generic/include/odp_event_internal.h
index 1f88a10ce..cee13bdcf 100644
--- a/platform/linux-generic/include/odp_event_internal.h
+++ b/platform/linux-generic/include/odp_event_internal.h
@@ -55,9 +55,6 @@ typedef struct _odp_event_hdr_t {
/* Initial buffer tail pointer */
uint8_t *buf_end;
- /* User area pointer */
- void *uarea_addr;
-
/* Combined pool and buffer index */
buffer_index_t index;
diff --git a/platform/linux-generic/include/odp_packet_internal.h b/platform/linux-generic/include/odp_packet_internal.h
index 6372705db..9d62f67d6 100644
--- a/platform/linux-generic/include/odp_packet_internal.h
+++ b/platform/linux-generic/include/odp_packet_internal.h
@@ -120,6 +120,9 @@ typedef struct ODP_ALIGNED_CACHE odp_packet_hdr_t {
/* Flow hash value */
uint32_t flow_hash;
+ /* User area pointer */
+ void *uarea_addr;
+
/* User context pointer */
const void *user_ptr;
diff --git a/platform/linux-generic/include/odp_timer_internal.h b/platform/linux-generic/include/odp_timer_internal.h
index 2a7173d29..b83591446 100644
--- a/platform/linux-generic/include/odp_timer_internal.h
+++ b/platform/linux-generic/include/odp_timer_internal.h
@@ -1,5 +1,5 @@
/* Copyright (c) 2014-2018, Linaro Limited
- * Copyright (c) 2021, Nokia
+ * Copyright (c) 2021-2022, Nokia
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
@@ -40,6 +40,9 @@ typedef struct ODP_ALIGNED_CACHE odp_timeout_hdr_t {
} odp_timeout_hdr_t;
+ODP_STATIC_ASSERT(sizeof(odp_timeout_hdr_t) <= ODP_CACHE_LINE_SIZE,
+ "TIMEOUT_HDR_SIZE_ERROR");
+
/* A larger decrement value should be used after receiving events compared to
* an 'empty' call. */
void _odp_timer_run_inline(int dec);
diff --git a/platform/linux-generic/odp_packet.c b/platform/linux-generic/odp_packet.c
index 4f20e97b1..2536c2a44 100644
--- a/platform/linux-generic/odp_packet.c
+++ b/platform/linux-generic/odp_packet.c
@@ -51,7 +51,7 @@ const _odp_packet_inline_offset_t _odp_packet_inline ODP_ALIGNED_CACHE = {
.input = offsetof(odp_packet_hdr_t, input),
.seg_count = offsetof(odp_packet_hdr_t, seg_count),
.user_ptr = offsetof(odp_packet_hdr_t, user_ptr),
- .user_area = offsetof(odp_packet_hdr_t, event_hdr.uarea_addr),
+ .user_area = offsetof(odp_packet_hdr_t, uarea_addr),
.l2_offset = offsetof(odp_packet_hdr_t, p.l2_offset),
.l3_offset = offsetof(odp_packet_hdr_t, p.l3_offset),
.l4_offset = offsetof(odp_packet_hdr_t, p.l4_offset),
@@ -194,8 +194,7 @@ static inline void packet_seg_copy_md(odp_packet_hdr_t *dst,
dst->payload_offset = src->payload_offset;
dst->user_ptr = src->user_ptr;
- /* event header side packet metadata */
- dst->event_hdr.uarea_addr = src->event_hdr.uarea_addr;
+ dst->uarea_addr = src->uarea_addr;
/* segmentation data is not copied:
* seg_next
@@ -1754,9 +1753,8 @@ int _odp_packet_copy_md_to_packet(odp_packet_t srcpkt, odp_packet_t dstpkt)
dsthdr->cos = srchdr->cos;
dsthdr->cls_mark = srchdr->cls_mark;
dsthdr->user_ptr = srchdr->user_ptr;
- if (dsthdr->event_hdr.uarea_addr != NULL &&
- srchdr->event_hdr.uarea_addr != NULL) {
- memcpy(dsthdr->event_hdr.uarea_addr, srchdr->event_hdr.uarea_addr,
+ if (dsthdr->uarea_addr != NULL && srchdr->uarea_addr != NULL) {
+ memcpy(dsthdr->uarea_addr, srchdr->uarea_addr,
dst_uarea_size <= src_uarea_size ? dst_uarea_size :
src_uarea_size);
}
diff --git a/platform/linux-generic/odp_pool.c b/platform/linux-generic/odp_pool.c
index fef2ecf8d..1df04d546 100644
--- a/platform/linux-generic/odp_pool.c
+++ b/platform/linux-generic/odp_pool.c
@@ -436,7 +436,6 @@ static void init_event_hdr(pool_t *pool, _odp_event_hdr_t *event_hdr, uint32_t b
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 */
@@ -450,6 +449,7 @@ static void init_event_hdr(pool_t *pool, _odp_event_hdr_t *event_hdr, uint32_t b
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;