diff options
author | Matias Elo <matias.elo@nokia.com> | 2022-05-02 11:00:08 +0300 |
---|---|---|
committer | Matias Elo <matias.elo@nokia.com> | 2022-05-25 10:57:59 +0300 |
commit | 0f0b3f6417938001e8bb10e72929967faf0c1dea (patch) | |
tree | 64242a54609f6070dad116e0ef25e0ea8f3cdce0 /platform | |
parent | 87a6510b19e4ccb9669cdb08ea424f9c83b908d1 (diff) |
Port b81e13439 "linux-gen: timer: inline small timer functions"
Port original commit from linux-generic.
Signed-off-by: Matias Elo <matias.elo@nokia.com>
Reviewed-by: Tuomas Taipale <tuomas.taipale@nokia.com>
Diffstat (limited to 'platform')
-rw-r--r-- | platform/linux-dpdk/Makefile.am | 7 | ||||
-rw-r--r-- | platform/linux-dpdk/include/odp/api/plat/timer_inline_types.h | 37 | ||||
-rw-r--r-- | platform/linux-dpdk/include/odp/api/plat/timer_inlines.h | 60 | ||||
-rw-r--r-- | platform/linux-dpdk/odp_timer.c | 44 |
4 files changed, 117 insertions, 31 deletions
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index fb7ab7adf..22442ffdb 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -48,7 +48,9 @@ odpapiplatinclude_HEADERS = \ include/odp/api/plat/sync_inlines.h \ include/odp/api/plat/thread_inlines.h \ include/odp/api/plat/ticketlock_inlines.h \ - include/odp/api/plat/time_inlines.h + include/odp/api/plat/time_inlines.h \ + include/odp/api/plat/timer_inlines.h \ + include/odp/api/plat/timer_inline_types.h odpapiabiarchinclude_HEADERS += \ include-abi/odp/api/abi/align.h \ @@ -245,7 +247,8 @@ __LIB__libodp_dpdk_la_SOURCES += \ ../linux-generic/odp_sync_api.c \ ../linux-generic/odp_thread_api.c \ ../linux-generic/odp_ticketlock_api.c \ - ../linux-generic/odp_time_api.c + ../linux-generic/odp_time_api.c \ + ../linux-generic/odp_timer_api.c endif if ARCH_IS_ARM diff --git a/platform/linux-dpdk/include/odp/api/plat/timer_inline_types.h b/platform/linux-dpdk/include/odp/api/plat/timer_inline_types.h new file mode 100644 index 000000000..e3397c4df --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/timer_inline_types.h @@ -0,0 +1,37 @@ +/* Copyright (c) 2022, Nokia + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_PLAT_TIMER_INLINE_TYPES_H_ +#define ODP_PLAT_TIMER_INLINE_TYPES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdint.h> + +/** @cond _ODP_HIDE_FROM_DOXYGEN_ */ + +/* Timeout header field accessor */ +#define _odp_timeout_hdr_field(hdr, cast, field) \ + (*(cast *)(uintptr_t)((uint8_t *)hdr + \ + _odp_timeout_inline_offset.field)) + +/* Timeout header field offsets for inline functions */ +typedef struct _odp_timeout_inline_offset_t { + uint16_t expiration; + uint16_t timer; + uint16_t user_ptr; + +} _odp_timeout_inline_offset_t; + +/** @endcond */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-dpdk/include/odp/api/plat/timer_inlines.h b/platform/linux-dpdk/include/odp/api/plat/timer_inlines.h new file mode 100644 index 000000000..270a6769b --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/timer_inlines.h @@ -0,0 +1,60 @@ +/* Copyright (c) 2022, Nokia + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_PLAT_TIMER_INLINES_H_ +#define ODP_PLAT_TIMER_INLINES_H_ + +#include <odp/api/event_types.h> +#include <odp/api/timer_types.h> + +#include <odp/api/plat/timer_inline_types.h> + +#include <stdint.h> + +/** @cond _ODP_HIDE_FROM_DOXYGEN_ */ + +extern const _odp_timeout_inline_offset_t _odp_timeout_inline_offset; + +#ifndef _ODP_NO_INLINE + /* Inline functions by default */ + #define _ODP_INLINE static inline + #define odp_timeout_timer __odp_timeout_timer + #define odp_timeout_tick __odp_timeout_tick + #define odp_timeout_user_ptr __odp_timeout_user_ptr + #define odp_timeout_from_event __odp_timeout_from_event + #define odp_timeout_to_event __odp_timeout_to_event +#else + #define _ODP_INLINE +#endif + +_ODP_INLINE odp_timer_t odp_timeout_timer(odp_timeout_t tmo) +{ + return _odp_timeout_hdr_field(tmo, odp_timer_t, timer); +} + +_ODP_INLINE uint64_t odp_timeout_tick(odp_timeout_t tmo) +{ + return _odp_timeout_hdr_field(tmo, uint64_t, expiration); +} + +_ODP_INLINE void *odp_timeout_user_ptr(odp_timeout_t tmo) +{ + return _odp_timeout_hdr_field(tmo, void *, user_ptr); +} + +_ODP_INLINE odp_timeout_t odp_timeout_from_event(odp_event_t ev) +{ + return (odp_timeout_t)ev; +} + +_ODP_INLINE odp_event_t odp_timeout_to_event(odp_timeout_t tmo) +{ + return (odp_event_t)tmo; +} + +/** @endcond */ + +#endif diff --git a/platform/linux-dpdk/odp_timer.c b/platform/linux-dpdk/odp_timer.c index f2f28f1d6..01f23ee31 100644 --- a/platform/linux-dpdk/odp_timer.c +++ b/platform/linux-dpdk/odp_timer.c @@ -16,6 +16,9 @@ #include <odp/api/timer.h> #include <odp/api/plat/queue_inlines.h> +#include <odp/api/plat/timer_inlines.h> + +#include <odp/api/plat/timer_inline_types.h> #include <odp_debug_internal.h> #include <odp_init_internal.h> @@ -172,6 +175,18 @@ static timer_global_t *timer_global; /* Timer thread local data */ static __thread timer_local_t timer_local; +#include <odp/visibility_begin.h> + +/* Fill in timeout header field offsets for inline functions */ +const _odp_timeout_inline_offset_t +_odp_timeout_inline_offset ODP_ALIGNED_CACHE = { + .expiration = offsetof(odp_timeout_hdr_t, expiration), + .timer = offsetof(odp_timeout_hdr_t, timer), + .user_ptr = offsetof(odp_timeout_hdr_t, user_ptr) +}; + +#include <odp/visibility_end.h> + static void timer_cb(struct rte_timer *rte_timer, void *arg ODP_UNUSED) { timer_entry_t *timer = rte_timer->arg; @@ -1204,16 +1219,6 @@ uint64_t odp_timer_to_u64(odp_timer_t timer_hdl) return (uint64_t)(uintptr_t)timer_hdl; } -odp_timeout_t odp_timeout_from_event(odp_event_t ev) -{ - return (odp_timeout_t)ev; -} - -odp_event_t odp_timeout_to_event(odp_timeout_t tmo) -{ - return (odp_event_t)tmo; -} - uint64_t odp_timeout_to_u64(odp_timeout_t tmo) { return (uint64_t)(uintptr_t)tmo; @@ -1231,25 +1236,6 @@ int odp_timeout_fresh(odp_timeout_t tmo) return timeout_hdr->expiration == timer->tick; } -odp_timer_t odp_timeout_timer(odp_timeout_t tmo) -{ - odp_timeout_hdr_t *timeout_hdr = timeout_to_hdr(tmo); - - return timeout_hdr->timer; -} - -uint64_t odp_timeout_tick(odp_timeout_t tmo) -{ - return timeout_to_hdr(tmo)->expiration; -} - -void *odp_timeout_user_ptr(odp_timeout_t tmo) -{ - odp_timeout_hdr_t *timeout_hdr = timeout_to_hdr(tmo); - - return (void *)(uintptr_t)timeout_hdr->user_ptr; -} - odp_timeout_t odp_timeout_alloc(odp_pool_t pool_hdl) { odp_event_t event; |