aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@linaro.org>2018-01-30 12:31:35 +0200
committerMaxim Uvarov <maxim.uvarov@linaro.org>2018-02-05 11:52:20 +0300
commitbfa24c0b7f035a84dd30e161673e97df244a926f (patch)
tree51e82717e844fc3dc41056b420f01b15cc23d187
parent7f80bdf3a851c1b37e5826327ab5415ac5abe7a4 (diff)
linux-gen: pktio: inline pktio index function
Inline packet IO interface handle to index conversion function which may be used frequently. Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org> Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org> Reviewed-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
-rw-r--r--platform/linux-generic/Makefile.am3
-rw-r--r--platform/linux-generic/include-abi/odp/api/abi/packet_io.h4
-rw-r--r--platform/linux-generic/include/odp/api/plat/pktio_inlines.h27
-rw-r--r--platform/linux-generic/include/odp/api/plat/pktio_inlines_api.h31
-rw-r--r--platform/linux-generic/include/odp_packet_io_internal.h13
-rw-r--r--platform/linux-generic/odp_packet.c4
-rw-r--r--platform/linux-generic/odp_packet_io.c17
-rw-r--r--platform/linux-generic/odp_pktio_api.c14
8 files changed, 93 insertions, 20 deletions
diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
index 10e38ac3c..1c2b625cb 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -30,6 +30,8 @@ odpapiplatinclude_HEADERS = \
include/odp/api/plat/packet_inline_types.h \
include/odp/api/plat/packet_inlines.h \
include/odp/api/plat/packet_inlines_api.h \
+ include/odp/api/plat/pktio_inlines.h \
+ include/odp/api/plat/pktio_inlines_api.h \
include/odp/api/plat/pool_inline_types.h \
include/odp/api/plat/std_clib_inlines.h \
include/odp/api/plat/strong_types.h \
@@ -205,6 +207,7 @@ __LIB__libodp_linux_la_SOURCES += \
odp_byteorder.c \
odp_packet_api.c \
odp_packet_flags_api.c \
+ odp_pktio_api.c \
odp_std_clib.c \
odp_sync.c \
odp_thread_api.c \
diff --git a/platform/linux-generic/include-abi/odp/api/abi/packet_io.h b/platform/linux-generic/include-abi/odp/api/abi/packet_io.h
index a84e858e6..07931b817 100644
--- a/platform/linux-generic/include-abi/odp/api/abi/packet_io.h
+++ b/platform/linux-generic/include-abi/odp/api/abi/packet_io.h
@@ -51,6 +51,10 @@ typedef struct odp_pktout_queue_t {
* @}
*/
+#define _ODP_INLINE static inline
+#include <odp/api/plat/pktio_inlines.h>
+#include <odp/api/plat/pktio_inlines_api.h>
+
#ifdef __cplusplus
}
#endif
diff --git a/platform/linux-generic/include/odp/api/plat/pktio_inlines.h b/platform/linux-generic/include/odp/api/plat/pktio_inlines.h
new file mode 100644
index 000000000..6a2aa72d8
--- /dev/null
+++ b/platform/linux-generic/include/odp/api/plat/pktio_inlines.h
@@ -0,0 +1,27 @@
+/* Copyright (c) 2018, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef ODP_PLAT_PKTIO_INLINES_H_
+#define ODP_PLAT_PKTIO_INLINES_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @cond _ODP_HIDE_FROM_DOXYGEN_ */
+
+static inline int _odp_pktio_index(odp_pktio_t pktio)
+{
+ return (int)(uintptr_t)pktio - 1;
+}
+
+/** @endcond */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/platform/linux-generic/include/odp/api/plat/pktio_inlines_api.h b/platform/linux-generic/include/odp/api/plat/pktio_inlines_api.h
new file mode 100644
index 000000000..5b59a4378
--- /dev/null
+++ b/platform/linux-generic/include/odp/api/plat/pktio_inlines_api.h
@@ -0,0 +1,31 @@
+/* Copyright (c) 2018, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+/**
+ * @file
+ */
+
+#ifndef ODP_PLAT_PKTIO_INLINES_API_H_
+#define ODP_PLAT_PKTIO_INLINES_API_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_ODP_INLINE int odp_pktio_index(odp_pktio_t pktio)
+{
+ return _odp_pktio_index(pktio);
+}
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/platform/linux-generic/include/odp_packet_io_internal.h b/platform/linux-generic/include/odp_packet_io_internal.h
index ad34e964a..1de0cbf90 100644
--- a/platform/linux-generic/include/odp_packet_io_internal.h
+++ b/platform/linux-generic/include/odp_packet_io_internal.h
@@ -18,6 +18,8 @@
extern "C" {
#endif
+#include <odp/api/packet_io.h>
+#include <odp/api/plat/pktio_inlines.h>
#include <odp/api/spinlock.h>
#include <odp/api/ticketlock.h>
#include <odp_classification_datamodel.h>
@@ -235,13 +237,10 @@ typedef struct pktio_if_ops {
extern void *pktio_entry_ptr[];
-static inline int pktio_to_id(odp_pktio_t pktio)
-{
- return _odp_typeval(pktio) - 1;
-}
-
static inline pktio_entry_t *get_pktio_entry(odp_pktio_t pktio)
{
+ int idx;
+
if (odp_unlikely(pktio == ODP_PKTIO_INVALID))
return NULL;
@@ -251,7 +250,9 @@ static inline pktio_entry_t *get_pktio_entry(odp_pktio_t pktio)
return NULL;
}
- return pktio_entry_ptr[pktio_to_id(pktio)];
+ idx = _odp_pktio_index(pktio);
+
+ return pktio_entry_ptr[idx];
}
static inline int pktio_cls_enabled(pktio_entry_t *entry)
diff --git a/platform/linux-generic/odp_packet.c b/platform/linux-generic/odp_packet.c
index 488dcbddf..1909bae25 100644
--- a/platform/linux-generic/odp_packet.c
+++ b/platform/linux-generic/odp_packet.c
@@ -13,6 +13,8 @@
#include <odp/api/hints.h>
#include <odp/api/byteorder.h>
#include <odp/api/plat/byteorder_inlines.h>
+#include <odp/api/packet_io.h>
+#include <odp/api/plat/pktio_inlines.h>
#include <protocols/eth.h>
#include <protocols/ip.h>
@@ -1269,7 +1271,7 @@ void *odp_packet_offset(odp_packet_t pkt, uint32_t offset, uint32_t *len,
int odp_packet_input_index(odp_packet_t pkt)
{
- return odp_pktio_index(packet_hdr(pkt)->input);
+ return _odp_pktio_index(packet_hdr(pkt)->input);
}
void odp_packet_user_ptr_set(odp_packet_t pkt, const void *ctx)
diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c
index 460891d06..4eae4ed1e 100644
--- a/platform/linux-generic/odp_packet_io.c
+++ b/platform/linux-generic/odp_packet_io.c
@@ -9,6 +9,7 @@
#include <odp_posix_extensions.h>
#include <odp/api/packet_io.h>
+#include <odp/api/plat/pktio_inlines.h>
#include <odp_packet_io_internal.h>
#include <odp/api/packet.h>
#include <odp_packet_internal.h>
@@ -481,7 +482,7 @@ int odp_pktio_start(odp_pktio_t hdl)
}
}
- sched_fn->pktio_start(pktio_to_id(hdl), num, index, odpq);
+ sched_fn->pktio_start(_odp_pktio_index(hdl), num, index, odpq);
}
return res;
@@ -1022,16 +1023,6 @@ int odp_pktio_info(odp_pktio_t hdl, odp_pktio_info_t *info)
return 0;
}
-int odp_pktio_index(odp_pktio_t pktio)
-{
- pktio_entry_t *entry = get_pktio_entry(pktio);
-
- if (!entry || is_free(entry))
- return -1;
-
- return pktio_to_id(pktio);
-}
-
uint64_t odp_pktin_ts_res(odp_pktio_t hdl)
{
pktio_entry_t *entry;
@@ -1361,7 +1352,7 @@ int odp_pktin_queue_config(odp_pktio_t pktio,
mode == ODP_PKTIN_MODE_SCHED) {
odp_queue_param_t queue_param;
char name[ODP_QUEUE_NAME_LEN];
- int pktio_id = pktio_to_id(pktio);
+ int pktio_id = _odp_pktio_index(pktio);
snprintf(name, sizeof(name), "odp-pktin-%i-%i",
pktio_id, i);
@@ -1496,7 +1487,7 @@ int odp_pktout_queue_config(odp_pktio_t pktio,
odp_queue_param_t queue_param;
queue_t q_int;
char name[ODP_QUEUE_NAME_LEN];
- int pktio_id = pktio_to_id(pktio);
+ int pktio_id = _odp_pktio_index(pktio);
snprintf(name, sizeof(name), "odp-pktout-%i-%i",
pktio_id, i);
diff --git a/platform/linux-generic/odp_pktio_api.c b/platform/linux-generic/odp_pktio_api.c
new file mode 100644
index 000000000..f4dc33466
--- /dev/null
+++ b/platform/linux-generic/odp_pktio_api.c
@@ -0,0 +1,14 @@
+/* Copyright (c) 2018, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include "config.h"
+
+#include <odp/api/packet_io.h>
+#include <odp/api/plat/pktio_inlines.h>
+
+/* Include non-inlined versions of API functions */
+#define _ODP_INLINE
+#include <odp/api/plat/pktio_inlines_api.h>