diff options
author | Matias Elo <matias.elo@nokia.com> | 2022-01-10 10:05:47 +0200 |
---|---|---|
committer | Matias Elo <matias.elo@nokia.com> | 2022-01-12 16:34:48 +0200 |
commit | 0ca93faa726b43a3dc006036d5f193c2297fc225 (patch) | |
tree | 62b5e2343c52bf9fc77847d512653f9b5ff9f9b8 /platform/linux-generic | |
parent | f7f7d94eaeeaf502b13c0ea4a18fa8addfa79c22 (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.h | 3 | ||||
-rw-r--r-- | platform/linux-generic/include/odp_packet_internal.h | 3 | ||||
-rw-r--r-- | platform/linux-generic/include/odp_timer_internal.h | 5 | ||||
-rw-r--r-- | platform/linux-generic/odp_packet.c | 10 | ||||
-rw-r--r-- | platform/linux-generic/odp_pool.c | 2 |
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; |