aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/odp_init.c
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@nokia.com>2016-03-17 09:58:41 +0200
committerMaxim Uvarov <maxim.uvarov@linaro.org>2016-04-11 15:15:01 +0300
commit4e2b9c195ced95b9b7fd831d708e648576df23ec (patch)
treec6beec1d76d5ea6f96a26c06b5cf4da33cecc95a /platform/linux-generic/odp_init.c
parenta0cc619cc628f74a75bd67fc7dbafc9641b3b130 (diff)
api: init: add instance handle
Added opaque odp_instance_t handle for storing ODP instance ID. Global init generates instance ID which is used to identify an ODP instance in the system. Instance ID allows to launch multiple separate ODP applications (without name space clash). Application threads define in odp_init_local() call which instance they join. Simultaneously, a thread may belong to only single instance and thus odp_term_local() call does not need instance handle parameter. Currently, linux-generic implementation supports only single instance. Linux helper pthread and process create APIs were updated with instance handle through a new type (odph_linux_thr_param_t). Process API calls were missing thread type selection. A params type decreases number of parameters needed (from 6 to 3 for pthreads) and reduces need for future function prototype changes (if e.g. new parameters need to be added). Signed-off-by: Petri Savolainen <petri.savolainen@nokia.com> Reviewed-and-tested-by: Bill Fischofer <bill.fischofer@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform/linux-generic/odp_init.c')
-rw-r--r--platform/linux-generic/odp_init.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/platform/linux-generic/odp_init.c b/platform/linux-generic/odp_init.c
index 11e2ec33c..284cecf05 100644
--- a/platform/linux-generic/odp_init.c
+++ b/platform/linux-generic/odp_init.c
@@ -12,7 +12,8 @@
struct odp_global_data_s odp_global_data;
-int odp_init_global(const odp_init_t *params,
+int odp_init_global(odp_instance_t *instance,
+ const odp_init_t *params,
const odp_platform_init_t *platform_params ODP_UNUSED)
{
odp_global_data.main_pid = getpid();
@@ -105,6 +106,9 @@ int odp_init_global(const odp_init_t *params,
goto init_failed;
}
+ /* Dummy support for single instance */
+ *instance = INSTANCE_ID;
+
return 0;
init_failed:
@@ -112,8 +116,12 @@ init_failed:
return -1;
}
-int odp_term_global(void)
+int odp_term_global(odp_instance_t instance)
{
+ if (instance != INSTANCE_ID) {
+ ODP_ERR("Bad instance.\n");
+ return -1;
+ }
return _odp_term_global(ALL_INIT);
}
@@ -221,10 +229,15 @@ int _odp_term_global(enum init_stage stage)
return rc;
}
-int odp_init_local(odp_thread_type_t thr_type)
+int odp_init_local(odp_instance_t instance, odp_thread_type_t thr_type)
{
enum init_stage stage = NO_INIT;
+ if (instance != INSTANCE_ID) {
+ ODP_ERR("Bad instance.\n");
+ goto init_fail;
+ }
+
if (odp_shm_init_local()) {
ODP_ERR("ODP shm local init failed.\n");
goto init_fail;