@@ -530,7 +530,7 @@ int main(int argc, char *argv[])
int core_count;
/* Init ODP before calling anything else */
- if (odp_init_global()) {
+ if (odp_init_global(ODP_INIT_F_ALL)) {
ODP_ERR("Error: ODP global init failed.\n");
exit(EXIT_FAILURE);
}
@@ -288,7 +288,7 @@ int main(int argc, char *argv[])
odp_pktio_t pktio;
/* Init ODP before calling anything else */
- if (odp_init_global()) {
+ if (odp_init_global(ODP_INIT_F_ALL)) {
ODP_ERR("Error: ODP global init failed.\n");
exit(EXIT_FAILURE);
}
@@ -934,7 +934,7 @@ int main(int argc, char *argv[])
memset(thread_tbl, 0, sizeof(thread_tbl));
- if (odp_init_global()) {
+ if (odp_init_global(ODP_INIT_F_ALL)) {
printf("ODP global init failed.\n");
return -1;
}
@@ -285,7 +285,7 @@ int main(int argc, char *argv[])
int core_count;
/* Init ODP before calling anything else */
- if (odp_init_global()) {
+ if (odp_init_global(ODP_INIT_F_ALL & ~ODP_INIT_F_TIMER)) {
ODP_ERR("Error: ODP global init failed.\n");
exit(EXIT_FAILURE);
}
@@ -201,7 +201,7 @@ int main(int argc, char *argv[])
int i;
/* Init ODP before calling anything else */
- if (odp_init_global()) {
+ if (odp_init_global(ODP_INIT_F_ALL & ~ODP_INIT_F_TIMER)) {
ODP_ERR("Error: ODP global init failed.\n");
exit(EXIT_FAILURE);
}
@@ -210,7 +210,7 @@ int main(int argc, char *argv[])
memset(thread_tbl, 0, sizeof(thread_tbl));
- if (odp_init_global()) {
+ if (odp_init_global(ODP_INIT_F_ALL)) {
printf("ODP global init failed.\n");
return -1;
}
@@ -22,6 +22,13 @@ extern "C" {
#include <odp_std_types.h>
+#define ODP_INIT_F_ALL 0xffffffff
+#define ODP_INIT_F_SHMINIT (1 << 0)
+#define ODP_INIT_F_POOL (1 << 1)
+#define ODP_INIT_F_QUEUE (1 << 2)
+#define ODP_INIT_F_SCHEDULE (1 << 3)
+#define ODP_INIT_F_PKTIO (1 << 4)
+#define ODP_INIT_F_TIMER (1 << 5)
@@ -31,9 +38,10 @@ extern "C" {
* This function must be called once before calling
* any other ODP API functions.
*
+ * @param mask Mask odp layers to be initialized
* @return 0 if successful
*/
-int odp_init_global(void);
+int odp_init_global(uint32_t mask);
/**
@@ -50,7 +50,7 @@ int odp_init_dpdk(void)
return 0;
}
-int odp_init_global(void)
+int odp_init_global(uint32_t mask)
{
odp_thread_init_global();
@@ -61,34 +61,46 @@ int odp_init_global(void)
return -1;
}
- if (odp_shm_init_global()) {
- ODP_ERR("ODP shm init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_SHMINIT) {
+ if (odp_shm_init_global()) {
+ ODP_ERR("ODP shm init failed.\n");
+ return -1;
+ }
}
- if (odp_buffer_pool_init_global()) {
- ODP_ERR("ODP buffer pool init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_POOL) {
+ if (odp_buffer_pool_init_global()) {
+ ODP_ERR("ODP buffer pool init failed.\n");
+ return -1;
+ }
}
- if (odp_queue_init_global()) {
- ODP_ERR("ODP queue init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_QUEUE) {
+ if (odp_queue_init_global()) {
+ ODP_ERR("ODP queue init failed.\n");
+ return -1;
+ }
}
- if (odp_schedule_init_global()) {
- ODP_ERR("ODP schedule init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_SCHEDULE) {
+ if (odp_schedule_init_global()) {
+ ODP_ERR("ODP schedule init failed.\n");
+ return -1;
+ }
}
- if (odp_pktio_init_global()) {
- ODP_ERR("ODP packet io init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_PKTIO) {
+ if (odp_pktio_init_global()) {
+ ODP_ERR("ODP packet io init failed.\n");
+ return -1;
+ }
}
- if (odp_timer_init_global()) {
- ODP_ERR("ODP timer init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_TIMER) {
+ if (odp_timer_init_global()) {
+ ODP_ERR("ODP timer init failed.\n");
+ return -1;
+ }
}
return 0;
@@ -9,40 +9,52 @@
#include <odp_debug.h>
-int odp_init_global(void)
+int odp_init_global(uint32_t mask)
{
odp_thread_init_global();
odp_system_info_init();
- if (odp_shm_init_global()) {
- ODP_ERR("ODP shm init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_SHMINIT) {
+ if (odp_shm_init_global()) {
+ ODP_ERR("ODP shm init failed.\n");
+ return -1;
+ }
}
- if (odp_buffer_pool_init_global()) {
- ODP_ERR("ODP buffer pool init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_POOL) {
+ if (odp_buffer_pool_init_global()) {
+ ODP_ERR("ODP buffer pool init failed.\n");
+ return -1;
+ }
}
- if (odp_queue_init_global()) {
- ODP_ERR("ODP queue init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_QUEUE) {
+ if (odp_queue_init_global()) {
+ ODP_ERR("ODP queue init failed.\n");
+ return -1;
+ }
}
- if (odp_schedule_init_global()) {
- ODP_ERR("ODP schedule init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_SCHEDULE) {
+ if (odp_schedule_init_global()) {
+ ODP_ERR("ODP schedule init failed.\n");
+ return -1;
+ }
}
- if (odp_pktio_init_global()) {
- ODP_ERR("ODP packet io init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_PKTIO) {
+ if (odp_pktio_init_global()) {
+ ODP_ERR("ODP packet io init failed.\n");
+ return -1;
+ }
}
- if (odp_timer_init_global()) {
- ODP_ERR("ODP timer init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_TIMER) {
+ if (odp_timer_init_global()) {
+ ODP_ERR("ODP timer init failed.\n");
+ return -1;
+ }
}
return 0;
@@ -90,7 +90,7 @@ static int ti_init_hw_config(void)
}
-int odp_init_global(void)
+int odp_init_global(uint32_t mask)
{
odp_thread_init_global();
@@ -99,34 +99,46 @@ int odp_init_global(void)
ti_em_osal_core_init_global();
ti_init_hw_config();
- if (odp_shm_init_global()) {
- ODP_ERR("ODP shm init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_SHMINIT) {
+ if (odp_shm_init_global()) {
+ ODP_ERR("ODP shm init failed.\n");
+ return -1;
+ }
}
- if (odp_buffer_pool_init_global()) {
- ODP_ERR("ODP buffer pool init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_POOL) {
+ if (odp_buffer_pool_init_global()) {
+ ODP_ERR("ODP buffer pool init failed.\n");
+ return -1;
+ }
}
- if (odp_queue_init_global()) {
- ODP_ERR("ODP queue init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_QUEUE) {
+ if (odp_queue_init_global()) {
+ ODP_ERR("ODP queue init failed.\n");
+ return -1;
+ }
}
- if (odp_schedule_init_global()) {
- ODP_ERR("ODP schedule init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_SCHEDULE) {
+ if (odp_schedule_init_global()) {
+ ODP_ERR("ODP schedule init failed.\n");
+ return -1;
+ }
}
- if (odp_pktio_init_global()) {
- ODP_ERR("ODP packet io init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_PKTIO) {
+ if (odp_pktio_init_global()) {
+ ODP_ERR("ODP packet io init failed.\n");
+ return -1;
+ }
}
- if (odp_timer_init_global()) {
- ODP_ERR("ODP timer init failed.\n");
- return -1;
+ if (mask & ODP_INIT_F_TIMER) {
+ if (odp_timer_init_global()) {
+ ODP_ERR("ODP timer init failed.\n");
+ return -1;
+ }
}
return 0;
@@ -56,7 +56,7 @@ int odp_test_global_init(void)
{
memset(thread_tbl, 0, sizeof(thread_tbl));
- if (odp_init_global()) {
+ if (odp_init_global(ODP_INIT_F_ALL)) {
ODP_ERR("ODP global init failed.\n");
return -1;
}
Add ability to specify which odp layers should be initialized. Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> --- v3: use uint32_t rename GQUEUE -> QUEUE GPOOL -> POOL v2: change logic according to v1. If flag set layer will be initialized. example/generator/odp_generator.c | 2 +- example/l2fwd/odp_l2fwd.c | 2 +- example/odp_example/odp_example.c | 2 +- example/packet/odp_pktio.c | 2 +- example/packet_netmap/odp_pktio_netmap.c | 2 +- example/timer/odp_timer_test.c | 2 +- include/odp_init.h | 10 ++++++- platform/linux-dpdk/odp_init.c | 50 ++++++++++++++++++++------------ platform/linux-generic/odp_init.c | 50 ++++++++++++++++++++------------ platform/linux-keystone2/odp_init.c | 50 ++++++++++++++++++++------------ test/api_test/odp_common.c | 2 +- 11 files changed, 109 insertions(+), 65 deletions(-)