aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-dpdk
diff options
context:
space:
mode:
authorMatias Elo <matias.elo@nokia.com>2022-05-02 11:00:08 +0300
committerMatias Elo <matias.elo@nokia.com>2022-05-25 10:57:59 +0300
commit0f0b3f6417938001e8bb10e72929967faf0c1dea (patch)
tree64242a54609f6070dad116e0ef25e0ea8f3cdce0 /platform/linux-dpdk
parent87a6510b19e4ccb9669cdb08ea424f9c83b908d1 (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/linux-dpdk')
-rw-r--r--platform/linux-dpdk/Makefile.am7
-rw-r--r--platform/linux-dpdk/include/odp/api/plat/timer_inline_types.h37
-rw-r--r--platform/linux-dpdk/include/odp/api/plat/timer_inlines.h60
-rw-r--r--platform/linux-dpdk/odp_timer.c44
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;