aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatias Elo <matias.elo@nokia.com>2018-09-25 12:53:53 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2018-10-04 15:15:31 +0300
commit9a4f8305e9c90f0ca0e7e4c240eb88d81b864ae0 (patch)
tree9a78d4f4bfe48d11306c2ab09c80e4b3977ada50
parenta08beb4afc6b7da7786cd7c827643689c1ee86d0 (diff)
linux-gen: split global data into RO and RW structs
RW global data is allocated from shm to enable process mode support. Signed-off-by: Matias Elo <matias.elo@nokia.com> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
-rw-r--r--platform/linux-generic/include/odp_debug_internal.h10
-rw-r--r--platform/linux-generic/include/odp_global_data.h13
-rw-r--r--platform/linux-generic/odp_cpumask.c42
-rw-r--r--platform/linux-generic/odp_cpumask_task.c16
-rw-r--r--platform/linux-generic/odp_fdserver.c26
-rw-r--r--platform/linux-generic/odp_init.c73
-rw-r--r--platform/linux-generic/odp_ipsec.c8
-rw-r--r--platform/linux-generic/odp_ishm.c76
-rw-r--r--platform/linux-generic/odp_libconfig.c20
-rw-r--r--platform/linux-generic/odp_pcapng.c46
-rw-r--r--platform/linux-generic/odp_pool.c2
-rw-r--r--platform/linux-generic/odp_shared_memory.c2
-rw-r--r--platform/linux-generic/odp_system_info.c28
-rw-r--r--platform/linux-generic/odp_timer.c2
-rw-r--r--platform/linux-generic/odp_traffic_mngr.c2
-rw-r--r--platform/linux-generic/pktio/ipc.c2
-rw-r--r--platform/linux-generic/pktio/ring.c2
17 files changed, 216 insertions, 154 deletions
diff --git a/platform/linux-generic/include/odp_debug_internal.h b/platform/linux-generic/include/odp_debug_internal.h
index 2e92dd74f..4dbe01b59 100644
--- a/platform/linux-generic/include/odp_debug_internal.h
+++ b/platform/linux-generic/include/odp_debug_internal.h
@@ -34,14 +34,14 @@ extern "C" {
#define ODP_ASSERT(cond) \
do { if ((ODP_DEBUG == 1) && (!(cond))) { \
ODP_ERR("%s\n", #cond); \
- odp_global_data.abort_fn(); } \
+ odp_global_ro.abort_fn(); } \
} while (0)
/**
* This macro is used to indicate when a given function is not implemented
*/
#define ODP_UNIMPLEMENTED() \
- odp_global_data.log_fn(ODP_LOG_UNIMPLEMENTED, \
+ odp_global_ro.log_fn(ODP_LOG_UNIMPLEMENTED, \
"%s:%d:The function %s() is not implemented\n", \
__FILE__, __LINE__, __func__)
/**
@@ -66,14 +66,14 @@ extern "C" {
#define ODP_ABORT(fmt, ...) \
do { \
ODP_LOG(ODP_LOG_ABORT, fmt, ##__VA_ARGS__); \
- odp_global_data.abort_fn(); \
+ odp_global_ro.abort_fn(); \
} while (0)
/**
* ODP LOG macro.
*/
#define ODP_LOG(level, fmt, ...) \
- odp_global_data.log_fn(level, "%s:%d:%s():" fmt, __FILE__, \
+ odp_global_ro.log_fn(level, "%s:%d:%s():" fmt, __FILE__, \
__LINE__, __func__, ##__VA_ARGS__)
/**
@@ -81,7 +81,7 @@ extern "C" {
* specifically for dumping internal data.
*/
#define ODP_PRINT(fmt, ...) \
- odp_global_data.log_fn(ODP_LOG_PRINT, fmt, ##__VA_ARGS__)
+ odp_global_ro.log_fn(ODP_LOG_PRINT, fmt, ##__VA_ARGS__)
#ifdef __cplusplus
}
diff --git a/platform/linux-generic/include/odp_global_data.h b/platform/linux-generic/include/odp_global_data.h
index 7b9e46530..d647bb5e8 100644
--- a/platform/linux-generic/include/odp_global_data.h
+++ b/platform/linux-generic/include/odp_global_data.h
@@ -37,7 +37,9 @@ typedef struct {
char *default_huge_page_dir;
} hugepage_info_t;
-struct odp_global_data_s {
+/* Read-only global data. Members should not be modified after global init
+ * to enable process more support. */
+struct odp_global_data_ro_t {
/* directory for odp mmaped files */
char *shm_dir;
/* overload default with env */
@@ -63,7 +65,14 @@ struct odp_global_data_s {
odp_random_kind_t ipsec_rand_kind;
};
-extern struct odp_global_data_s odp_global_data;
+/* Modifiable global data. Memory region is shared and synchronized amongst all
+ * worker processes. */
+struct odp_global_data_rw_t {
+ int dummy;
+};
+
+extern struct odp_global_data_ro_t odp_global_ro;
+extern struct odp_global_data_rw_t *odp_global_rw;
#ifdef __cplusplus
}
diff --git a/platform/linux-generic/odp_cpumask.c b/platform/linux-generic/odp_cpumask.c
index 1b384d4e5..551a80d82 100644
--- a/platform/linux-generic/odp_cpumask.c
+++ b/platform/linux-generic/odp_cpumask.c
@@ -236,8 +236,8 @@ static int get_available_cpus(void)
int ret;
/* Clear the global cpumasks for control and worker CPUs */
- odp_cpumask_zero(&odp_global_data.control_cpus);
- odp_cpumask_zero(&odp_global_data.worker_cpus);
+ odp_cpumask_zero(&odp_global_ro.control_cpus);
+ odp_cpumask_zero(&odp_global_ro.worker_cpus);
CPU_ZERO(&cpuset);
ret = sched_getaffinity(0, sizeof(cpuset), &cpuset);
@@ -249,12 +249,12 @@ static int get_available_cpus(void)
for (cpu_idnum = 0; cpu_idnum < CPU_SETSIZE - 1; cpu_idnum++) {
if (CPU_ISSET(cpu_idnum, &cpuset)) {
- odp_global_data.num_cpus_installed++;
+ odp_global_ro.num_cpus_installed++;
/* Add the CPU to our default cpumasks */
- odp_cpumask_set(&odp_global_data.control_cpus,
- (int)cpu_idnum);
- odp_cpumask_set(&odp_global_data.worker_cpus,
- (int)cpu_idnum);
+ odp_cpumask_set(&odp_global_ro.control_cpus,
+ (int)cpu_idnum);
+ odp_cpumask_set(&odp_global_ro.worker_cpus,
+ (int)cpu_idnum);
}
}
@@ -269,8 +269,8 @@ static int get_available_cpus(void)
*/
static void init_default_control_cpumask(int worker_cpus_default)
{
- odp_cpumask_t *control_mask = &odp_global_data.control_cpus;
- odp_cpumask_t *worker_mask = &odp_global_data.worker_cpus;
+ odp_cpumask_t *control_mask = &odp_global_ro.control_cpus;
+ odp_cpumask_t *worker_mask = &odp_global_ro.worker_cpus;
int i;
/* (Bits for all available CPUs are SET in control cpumask) */
@@ -281,7 +281,7 @@ static void init_default_control_cpumask(int worker_cpus_default)
* If only one or two CPUs installed, use CPU 0 for control.
* Otherwise leave it for the kernel and start with CPU 1.
*/
- if (odp_global_data.num_cpus_installed < 3) {
+ if (odp_global_ro.num_cpus_installed < 3) {
/*
* If only two CPUS, use CPU 0 for control and
* use CPU 1 for workers.
@@ -294,7 +294,7 @@ static void init_default_control_cpumask(int worker_cpus_default)
* reserve remaining CPUs for workers
*/
odp_cpumask_clr(control_mask, 0);
- for (i = 2; i < odp_global_data.num_cpus_installed; i++)
+ for (i = 2; i < odp_global_ro.num_cpus_installed; i++)
if (odp_cpumask_isset(worker_mask, i))
odp_cpumask_clr(control_mask, i);
}
@@ -303,7 +303,7 @@ static void init_default_control_cpumask(int worker_cpus_default)
* The worker cpumask was specified so first ensure
* the control cpumask does not overlap any worker CPUs
*/
- for (i = 0; i < odp_global_data.num_cpus_installed; i++)
+ for (i = 0; i < odp_global_ro.num_cpus_installed; i++)
if (odp_cpumask_isset(worker_mask, i))
odp_cpumask_clr(control_mask, i);
@@ -311,7 +311,7 @@ static void init_default_control_cpumask(int worker_cpus_default)
* If only one or two CPUs installed,
* ensure availability of CPU 0 for control threads
*/
- if (odp_global_data.num_cpus_installed < 3) {
+ if (odp_global_ro.num_cpus_installed < 3) {
odp_cpumask_set(control_mask, 0);
odp_cpumask_clr(control_mask, 1);
} else {
@@ -337,8 +337,8 @@ static void init_default_control_cpumask(int worker_cpus_default)
*/
static void init_default_worker_cpumask(int control_cpus_default)
{
- odp_cpumask_t *control_mask = &odp_global_data.control_cpus;
- odp_cpumask_t *worker_mask = &odp_global_data.worker_cpus;
+ odp_cpumask_t *control_mask = &odp_global_ro.control_cpus;
+ odp_cpumask_t *worker_mask = &odp_global_ro.worker_cpus;
int i;
/* (Bits for all available CPUs are SET in worker cpumask) */
@@ -348,10 +348,10 @@ static void init_default_worker_cpumask(int control_cpus_default)
* The control cpumask was also unspecified...
* CPU 0 is only used for workers on uniprocessor systems
*/
- if (odp_global_data.num_cpus_installed > 1)
+ if (odp_global_ro.num_cpus_installed > 1)
odp_cpumask_clr(worker_mask, 0);
- if (odp_global_data.num_cpus_installed > 2)
+ if (odp_global_ro.num_cpus_installed > 2)
/*
* If three or more CPUs, reserve CPU 0 for kernel,
* reserve CPU 1 for control, and
@@ -363,7 +363,7 @@ static void init_default_worker_cpumask(int control_cpus_default)
* The control cpumask was specified so first ensure
* the worker cpumask does not overlap any control CPUs
*/
- for (i = 0; i < odp_global_data.num_cpus_installed; i++)
+ for (i = 0; i < odp_global_ro.num_cpus_installed; i++)
if (odp_cpumask_isset(control_mask, i))
odp_cpumask_clr(worker_mask, i);
@@ -371,7 +371,7 @@ static void init_default_worker_cpumask(int control_cpus_default)
* If only one CPU installed, use CPU 0 for workers
* even though it is used for control as well.
*/
- if (odp_global_data.num_cpus_installed < 2)
+ if (odp_global_ro.num_cpus_installed < 2)
odp_cpumask_set(worker_mask, 0);
else
odp_cpumask_clr(worker_mask, 0);
@@ -386,8 +386,8 @@ static void init_default_worker_cpumask(int control_cpus_default)
*/
int odp_cpumask_init_global(const odp_init_t *params)
{
- odp_cpumask_t *control_mask = &odp_global_data.control_cpus;
- odp_cpumask_t *worker_mask = &odp_global_data.worker_cpus;
+ odp_cpumask_t *control_mask = &odp_global_ro.control_cpus;
+ odp_cpumask_t *worker_mask = &odp_global_ro.worker_cpus;
odp_cpumask_t check_mask;
int control_cpus_default = 1;
int worker_cpus_default = 1;
diff --git a/platform/linux-generic/odp_cpumask_task.c b/platform/linux-generic/odp_cpumask_task.c
index c1b79f07f..c269116ce 100644
--- a/platform/linux-generic/odp_cpumask_task.c
+++ b/platform/linux-generic/odp_cpumask_task.c
@@ -23,20 +23,20 @@ int odp_cpumask_default_worker(odp_cpumask_t *mask, int num)
* If no user supplied number or it's too large, then attempt
* to use all CPUs
*/
- cpu = odp_cpumask_count(&odp_global_data.worker_cpus);
+ cpu = odp_cpumask_count(&odp_global_ro.worker_cpus);
if (0 == num || cpu < num)
num = cpu;
/* build the mask, allocating down from highest numbered CPU */
odp_cpumask_zero(mask);
for (cpu = 0, i = CPU_SETSIZE - 1; i >= 0 && cpu < num; --i) {
- if (odp_cpumask_isset(&odp_global_data.worker_cpus, i)) {
+ if (odp_cpumask_isset(&odp_global_ro.worker_cpus, i)) {
odp_cpumask_set(mask, i);
cpu++;
}
}
- odp_cpumask_and(&overlap, mask, &odp_global_data.control_cpus);
+ odp_cpumask_and(&overlap, mask, &odp_global_ro.control_cpus);
if (odp_cpumask_count(&overlap))
ODP_DBG("\n\tWorker CPUs overlap with control CPUs...\n"
"\tthis will likely have a performance impact on the worker threads.\n");
@@ -59,7 +59,7 @@ int odp_cpumask_default_control(odp_cpumask_t *mask, int num)
* If user supplied number is too large, then attempt
* to use all installed control CPUs
*/
- cpu = odp_cpumask_count(&odp_global_data.control_cpus);
+ cpu = odp_cpumask_count(&odp_global_ro.control_cpus);
if (cpu < num)
num = cpu;
}
@@ -67,13 +67,13 @@ int odp_cpumask_default_control(odp_cpumask_t *mask, int num)
/* build the mask, allocating upwards from lowest numbered CPU */
odp_cpumask_zero(mask);
for (cpu = 0, i = 0; i < CPU_SETSIZE && cpu < num; i++) {
- if (odp_cpumask_isset(&odp_global_data.control_cpus, i)) {
+ if (odp_cpumask_isset(&odp_global_ro.control_cpus, i)) {
odp_cpumask_set(mask, i);
cpu++;
}
}
- odp_cpumask_and(&overlap, mask, &odp_global_data.worker_cpus);
+ odp_cpumask_and(&overlap, mask, &odp_global_ro.worker_cpus);
if (odp_cpumask_count(&overlap))
ODP_DBG("\n\tControl CPUs overlap with worker CPUs...\n"
"\tthis will likely have a performance impact on the worker threads.\n");
@@ -83,8 +83,8 @@ int odp_cpumask_default_control(odp_cpumask_t *mask, int num)
int odp_cpumask_all_available(odp_cpumask_t *mask)
{
- odp_cpumask_or(mask, &odp_global_data.worker_cpus,
- &odp_global_data.control_cpus);
+ odp_cpumask_or(mask, &odp_global_ro.worker_cpus,
+ &odp_global_ro.control_cpus);
return odp_cpumask_count(mask);
}
diff --git a/platform/linux-generic/odp_fdserver.c b/platform/linux-generic/odp_fdserver.c
index 0c9cc50e8..232d7f4e0 100644
--- a/platform/linux-generic/odp_fdserver.c
+++ b/platform/linux-generic/odp_fdserver.c
@@ -249,9 +249,9 @@ static int get_socket(void)
/* construct the named socket path: */
snprintf(sockpath, FDSERVER_SOCKPATH_MAXLEN, FDSERVER_SOCK_FORMAT,
- odp_global_data.shm_dir,
- odp_global_data.uid,
- odp_global_data.main_pid);
+ odp_global_ro.shm_dir,
+ odp_global_ro.uid,
+ odp_global_ro.main_pid);
s_sock = socket(AF_UNIX, SOCK_STREAM, 0);
if (s_sock == -1) {
@@ -566,16 +566,16 @@ int _odp_fdserver_init_global(void)
int res;
snprintf(sockpath, FDSERVER_SOCKPATH_MAXLEN, FDSERVER_SOCKDIR_FORMAT,
- odp_global_data.shm_dir,
- odp_global_data.uid);
+ odp_global_ro.shm_dir,
+ odp_global_ro.uid);
mkdir(sockpath, 0744);
/* construct the server named socket path: */
snprintf(sockpath, FDSERVER_SOCKPATH_MAXLEN, FDSERVER_SOCK_FORMAT,
- odp_global_data.shm_dir,
- odp_global_data.uid,
- odp_global_data.main_pid);
+ odp_global_ro.shm_dir,
+ odp_global_ro.uid,
+ odp_global_ro.main_pid);
/* create UNIX domain socket: */
sock = socket(AF_UNIX, SOCK_STREAM, 0);
@@ -692,17 +692,17 @@ int _odp_fdserver_term_global(void)
/* construct the server named socket path: */
snprintf(sockpath, FDSERVER_SOCKPATH_MAXLEN, FDSERVER_SOCK_FORMAT,
- odp_global_data.shm_dir,
- odp_global_data.uid,
- odp_global_data.main_pid);
+ odp_global_ro.shm_dir,
+ odp_global_ro.uid,
+ odp_global_ro.main_pid);
/* delete the UNIX domain socket: */
unlink(sockpath);
/* delete shm files directory */
snprintf(sockpath, FDSERVER_SOCKPATH_MAXLEN, FDSERVER_SOCKDIR_FORMAT,
- odp_global_data.shm_dir,
- odp_global_data.uid);
+ odp_global_ro.shm_dir,
+ odp_global_ro.uid);
rmdir(sockpath);
return 0;
diff --git a/platform/linux-generic/odp_init.c b/platform/linux-generic/odp_init.c
index 28f94cd37..2a4bad2e1 100644
--- a/platform/linux-generic/odp_init.c
+++ b/platform/linux-generic/odp_init.c
@@ -9,6 +9,7 @@
#include <odp_posix_extensions.h>
#include <odp/api/init.h>
+#include <odp/api/shared_memory.h>
#include <odp_debug_internal.h>
#include <odp_init_internal.h>
#include <odp_schedule_if.h>
@@ -27,6 +28,7 @@ enum init_stage {
SYSINFO_INIT,
ISHM_INIT,
FDSERVER_INIT,
+ GLOBAL_RW_DATA_INIT,
THREAD_INIT,
POOL_INIT,
QUEUE_INIT,
@@ -44,13 +46,51 @@ enum init_stage {
ALL_INIT /* All init stages completed */
};
-struct odp_global_data_s odp_global_data;
+struct odp_global_data_ro_t odp_global_ro;
+struct odp_global_data_rw_t *odp_global_rw;
void odp_init_param_init(odp_init_t *param)
{
memset(param, 0, sizeof(odp_init_t));
}
+static int global_rw_data_init(void)
+{
+ odp_shm_t shm;
+
+ shm = odp_shm_reserve("_odp_global_rw_data",
+ sizeof(struct odp_global_data_rw_t),
+ ODP_CACHE_LINE_SIZE, 0);
+
+ odp_global_rw = odp_shm_addr(shm);
+ if (odp_global_rw == NULL) {
+ ODP_ERR("Global RW data shm reserve failed.\n");
+ return -1;
+ }
+
+ memset(odp_global_rw, 0, sizeof(struct odp_global_data_rw_t));
+
+ return 0;
+}
+
+static int global_rw_data_term(void)
+{
+ odp_shm_t shm;
+
+ shm = odp_shm_lookup("_odp_global_rw_data");
+ if (shm == ODP_SHM_INVALID) {
+ ODP_ERR("Unable to find global RW data shm.\n");
+ return -1;
+ }
+
+ if (odp_shm_free(shm)) {
+ ODP_ERR("Global RW data shm free failed.\n");
+ return -1;
+ }
+
+ return 0;
+}
+
static int term_global(enum init_stage stage)
{
int rc = 0;
@@ -151,6 +191,13 @@ static int term_global(enum init_stage stage)
}
/* Fall through */
+ case GLOBAL_RW_DATA_INIT:
+ if (global_rw_data_term()) {
+ ODP_ERR("ODP global RW data term failed.\n");
+ rc = -1;
+ }
+ /* Fall through */
+
case FDSERVER_INIT:
if (_odp_fdserver_term_global()) {
ODP_ERR("ODP fdserver term failed.\n");
@@ -208,18 +255,18 @@ int odp_init_global(odp_instance_t *instance,
const odp_init_t *params,
const odp_platform_init_t *platform_params ODP_UNUSED)
{
- memset(&odp_global_data, 0, sizeof(struct odp_global_data_s));
- odp_global_data.main_pid = getpid();
+ memset(&odp_global_ro, 0, sizeof(struct odp_global_data_ro_t));
+ odp_global_ro.main_pid = getpid();
enum init_stage stage = NO_INIT;
- odp_global_data.log_fn = odp_override_log;
- odp_global_data.abort_fn = odp_override_abort;
+ odp_global_ro.log_fn = odp_override_log;
+ odp_global_ro.abort_fn = odp_override_abort;
if (params != NULL) {
if (params->log_fn != NULL)
- odp_global_data.log_fn = params->log_fn;
+ odp_global_ro.log_fn = params->log_fn;
if (params->abort_fn != NULL)
- odp_global_data.abort_fn = params->abort_fn;
+ odp_global_ro.abort_fn = params->abort_fn;
}
if (_odp_libconfig_init_global()) {
@@ -270,6 +317,12 @@ int odp_init_global(odp_instance_t *instance,
}
stage = FDSERVER_INIT;
+ if (global_rw_data_init()) {
+ ODP_ERR("ODP global RW data init failed.\n");
+ goto init_failed;
+ }
+ stage = GLOBAL_RW_DATA_INIT;
+
if (odp_thread_init_global()) {
ODP_ERR("ODP thread init failed.\n");
goto init_failed;
@@ -351,7 +404,7 @@ int odp_init_global(odp_instance_t *instance,
}
stage = IPSEC_INIT;
- *instance = (odp_instance_t)odp_global_data.main_pid;
+ *instance = (odp_instance_t)odp_global_ro.main_pid;
return 0;
@@ -362,7 +415,7 @@ init_failed:
int odp_term_global(odp_instance_t instance)
{
- if (instance != (odp_instance_t)odp_global_data.main_pid) {
+ if (instance != (odp_instance_t)odp_global_ro.main_pid) {
ODP_ERR("Bad instance.\n");
return -1;
}
@@ -441,7 +494,7 @@ int odp_init_local(odp_instance_t instance, odp_thread_type_t thr_type)
{
enum init_stage stage = NO_INIT;
- if (instance != (odp_instance_t)odp_global_data.main_pid) {
+ if (instance != (odp_instance_t)odp_global_ro.main_pid) {
ODP_ERR("Bad instance.\n");
goto init_fail;
}
diff --git a/platform/linux-generic/odp_ipsec.c b/platform/linux-generic/odp_ipsec.c
index 1bc549c22..4fdb4eeea 100644
--- a/platform/linux-generic/odp_ipsec.c
+++ b/platform/linux-generic/odp_ipsec.c
@@ -1005,7 +1005,7 @@ static int ipsec_out_iv(ipsec_state_t *state,
uint32_t len;
len = odp_random_data(state->iv, ipsec_sa->esp_iv_len,
- odp_global_data.ipsec_rand_kind);
+ odp_global_ro.ipsec_rand_kind);
if (len != ipsec_sa->esp_iv_len)
return -1;
@@ -1904,9 +1904,9 @@ int _odp_ipsec_init_global(void)
memset(&default_out_opt, 0, sizeof(default_out_opt));
- odp_global_data.ipsec_rand_kind = ODP_RANDOM_CRYPTO;
- if (odp_global_data.ipsec_rand_kind > odp_random_max_kind())
- odp_global_data.ipsec_rand_kind = odp_random_max_kind();
+ odp_global_ro.ipsec_rand_kind = ODP_RANDOM_CRYPTO;
+ if (odp_global_ro.ipsec_rand_kind > odp_random_max_kind())
+ odp_global_ro.ipsec_rand_kind = odp_random_max_kind();
return 0;
}
diff --git a/platform/linux-generic/odp_ishm.c b/platform/linux-generic/odp_ishm.c
index 1ed60c5f9..1a4ca9472 100644
--- a/platform/linux-generic/odp_ishm.c
+++ b/platform/linux-generic/odp_ishm.c
@@ -306,8 +306,8 @@ static void hp_init(void)
if (_odp_libconfig_lookup_ext_int("shm", NULL, "single_va",
&single_va)) {
- odp_global_data.shm_single_va = single_va;
- ODP_DBG("Shm single VA: %d\n", odp_global_data.shm_single_va);
+ odp_global_ro.shm_single_va = single_va;
+ ODP_DBG("Shm single VA: %d\n", odp_global_ro.shm_single_va);
}
if (!_odp_libconfig_lookup_ext_int("shm", NULL, "num_cached_hp",
@@ -320,14 +320,14 @@ static void hp_init(void)
ODP_DBG("Init HP cache with up to %d pages\n", count);
- if (!odp_global_data.hugepage_info.default_huge_page_dir) {
+ if (!odp_global_ro.hugepage_info.default_huge_page_dir) {
ODP_ERR("No huge page dir\n");
return;
}
snprintf(dir, ISHM_FILENAME_MAXLEN, "%s/%s",
- odp_global_data.hugepage_info.default_huge_page_dir,
- odp_global_data.uid);
+ odp_global_ro.hugepage_info.default_huge_page_dir,
+ odp_global_ro.uid);
if (mkdir(dir, 0744) != 0) {
if (errno != EEXIST) {
@@ -339,7 +339,7 @@ static void hp_init(void)
snprintf(filename, ISHM_FILENAME_MAXLEN,
"%s/odp-%d-ishm_cached",
dir,
- odp_global_data.main_pid);
+ odp_global_ro.main_pid);
addr = mmap(NULL,
sizeof(struct huge_page_cache) + sizeof(int) * count,
@@ -431,7 +431,7 @@ static void *alloc_fragment(uintptr_t size, int block_index, intptr_t align,
ishm_fragment_t *rem_fragmnt;
uintptr_t border;/* possible start of new fragment (next alignement) */
intptr_t left; /* room remaining after, if the segment is allocated */
- uintptr_t remainder = odp_global_data.shm_max_memory;
+ uintptr_t remainder = odp_global_ro.shm_max_memory;
/*
* search for the best bit, i.e. search for the unallocated fragment
@@ -607,22 +607,22 @@ static int create_file(int block_index, huge_flag_t huge, uint64_t len,
/* huge dir must be known to create files there!: */
if ((huge == HUGE) &&
- (!odp_global_data.hugepage_info.default_huge_page_dir))
+ (!odp_global_ro.hugepage_info.default_huge_page_dir))
return -1;
if (huge == HUGE)
snprintf(dir, ISHM_FILENAME_MAXLEN, "%s/%s",
- odp_global_data.hugepage_info.default_huge_page_dir,
- odp_global_data.uid);
+ odp_global_ro.hugepage_info.default_huge_page_dir,
+ odp_global_ro.uid);
else
snprintf(dir, ISHM_FILENAME_MAXLEN, "%s/%s",
- odp_global_data.shm_dir,
- odp_global_data.uid);
+ odp_global_ro.shm_dir,
+ odp_global_ro.uid);
snprintf(filename, ISHM_FILENAME_MAXLEN,
ISHM_FILENAME_FORMAT,
dir,
- odp_global_data.main_pid,
+ odp_global_ro.main_pid,
(name && name[0]) ? name : seq_string);
mkdir(dir, 0744);
@@ -651,9 +651,9 @@ static int create_file(int block_index, huge_flag_t huge, uint64_t len,
memcpy(new_block->filename, filename, ISHM_FILENAME_MAXLEN);
snprintf(new_block->exptname, ISHM_FILENAME_MAXLEN,
ISHM_EXPTNAME_FORMAT,
- odp_global_data.shm_dir,
- odp_global_data.uid,
- odp_global_data.main_pid,
+ odp_global_ro.shm_dir,
+ odp_global_ro.uid,
+ odp_global_ro.main_pid,
(name && name[0]) ? name : seq_string);
export_file = fopen(new_block->exptname, "w");
if (export_file == NULL) {
@@ -1223,8 +1223,8 @@ int _odp_ishm_find_exported(const char *remote_name, pid_t external_odp_pid,
/* try to read the block description file: */
snprintf(export_filename, ISHM_FILENAME_MAXLEN,
ISHM_EXPTNAME_FORMAT,
- odp_global_data.shm_dir,
- odp_global_data.uid,
+ odp_global_ro.shm_dir,
+ odp_global_ro.uid,
external_odp_pid,
remote_name);
@@ -1618,7 +1618,7 @@ int _odp_ishm_cleanup_files(const char *dirpath)
int p_len;
int f_len;
- snprintf(userdir, PATH_MAX, "%s/%s", dirpath, odp_global_data.uid);
+ snprintf(userdir, PATH_MAX, "%s/%s", dirpath, odp_global_ro.uid);
dir = opendir(userdir);
if (!dir) {
@@ -1627,7 +1627,7 @@ int _odp_ishm_cleanup_files(const char *dirpath)
dirpath, strerror(errno));
return 0;
}
- snprintf(prefix, PATH_MAX, _ODP_FILES_FMT, odp_global_data.main_pid);
+ snprintf(prefix, PATH_MAX, _ODP_FILES_FMT, odp_global_ro.main_pid);
p_len = strlen(prefix);
while ((e = readdir(dir)) != NULL) {
if (strncmp(e->d_name, prefix, p_len) == 0) {
@@ -1657,7 +1657,7 @@ int _odp_ishm_init_global(const odp_init_t *init)
void *spce_addr;
int i;
uid_t uid;
- char *hp_dir = odp_global_data.hugepage_info.default_huge_page_dir;
+ char *hp_dir = odp_global_ro.hugepage_info.default_huge_page_dir;
uint64_t align;
uint64_t max_memory = ODP_CONFIG_ISHM_VA_PREALLOC_SZ;
uint64_t internal = ODP_CONFIG_ISHM_VA_PREALLOC_SZ / 8;
@@ -1666,27 +1666,27 @@ int _odp_ishm_init_global(const odp_init_t *init)
if (init && init->shm.max_memory)
max_memory = init->shm.max_memory + internal;
- odp_global_data.shm_max_memory = max_memory;
- odp_global_data.shm_max_size = max_memory - internal;
- odp_global_data.main_pid = getpid();
- odp_global_data.shm_dir = getenv("ODP_SHM_DIR");
- if (odp_global_data.shm_dir) {
- odp_global_data.shm_dir_from_env = 1;
+ odp_global_ro.shm_max_memory = max_memory;
+ odp_global_ro.shm_max_size = max_memory - internal;
+ odp_global_ro.main_pid = getpid();
+ odp_global_ro.shm_dir = getenv("ODP_SHM_DIR");
+ if (odp_global_ro.shm_dir) {
+ odp_global_ro.shm_dir_from_env = 1;
} else {
- odp_global_data.shm_dir =
+ odp_global_ro.shm_dir =
calloc(1, sizeof(ISHM_FILENAME_NORMAL_PAGE_DIR));
- sprintf(odp_global_data.shm_dir, "%s",
+ sprintf(odp_global_ro.shm_dir, "%s",
ISHM_FILENAME_NORMAL_PAGE_DIR);
- odp_global_data.shm_dir_from_env = 0;
+ odp_global_ro.shm_dir_from_env = 0;
}
- ODP_DBG("ishm: using dir %s\n", odp_global_data.shm_dir);
+ ODP_DBG("ishm: using dir %s\n", odp_global_ro.shm_dir);
uid = getuid();
- snprintf(odp_global_data.uid, UID_MAXLEN, "%d",
+ snprintf(odp_global_ro.uid, UID_MAXLEN, "%d",
uid);
- if ((syscall(SYS_gettid)) != odp_global_data.main_pid) {
+ if ((syscall(SYS_gettid)) != odp_global_ro.main_pid) {
ODP_ERR("ishm init must be performed by the main "
"ODP process!\n.");
return -1;
@@ -1701,7 +1701,7 @@ int _odp_ishm_init_global(const odp_init_t *init)
align = odp_sys_huge_page_size();
}
- _odp_ishm_cleanup_files(odp_global_data.shm_dir);
+ _odp_ishm_cleanup_files(odp_global_ro.shm_dir);
/* allocate space for the internal shared mem block table: */
addr = mmap(NULL, sizeof(ishm_table_t),
@@ -1791,7 +1791,7 @@ int _odp_ishm_init_local(void)
* Do not re-run this for the main ODP process, as it has already
* been done in advance at _odp_ishm_init_global() time:
*/
- if ((getpid() == odp_global_data.main_pid) &&
+ if ((getpid() == odp_global_ro.main_pid) &&
(syscall(SYS_gettid) == getpid()))
return 0;
@@ -1874,7 +1874,7 @@ int _odp_ishm_term_global(void)
int index;
ishm_block_t *block;
- if ((getpid() != odp_global_data.main_pid) ||
+ if ((getpid() != odp_global_ro.main_pid) ||
(syscall(SYS_gettid) != getpid()))
ODP_ERR("odp_term_global() must be performed by the main "
"ODP process!\n.");
@@ -1908,8 +1908,8 @@ int _odp_ishm_term_global(void)
if (_odp_ishmphy_unbook_va())
ret |= -1;
- if (!odp_global_data.shm_dir_from_env)
- free(odp_global_data.shm_dir);
+ if (!odp_global_ro.shm_dir_from_env)
+ free(odp_global_ro.shm_dir);
hp_term();
diff --git a/platform/linux-generic/odp_libconfig.c b/platform/linux-generic/odp_libconfig.c
index 8caf9a53b..baf825bbe 100644
--- a/platform/linux-generic/odp_libconfig.c
+++ b/platform/linux-generic/odp_libconfig.c
@@ -23,8 +23,8 @@ int _odp_libconfig_init_global(void)
const char *vers_rt;
const char *ipml;
const char *ipml_rt;
- config_t *config = &odp_global_data.libconfig_default;
- config_t *config_rt = &odp_global_data.libconfig_runtime;
+ config_t *config = &odp_global_ro.libconfig_default;
+ config_t *config_rt = &odp_global_ro.libconfig_runtime;
config_init(config);
config_init(config_rt);
@@ -75,8 +75,8 @@ fail:
int _odp_libconfig_term_global(void)
{
- config_destroy(&odp_global_data.libconfig_default);
- config_destroy(&odp_global_data.libconfig_runtime);
+ config_destroy(&odp_global_ro.libconfig_default);
+ config_destroy(&odp_global_ro.libconfig_runtime);
return 0;
}
@@ -86,11 +86,11 @@ int _odp_libconfig_lookup_int(const char *path, int *value)
int ret_def = CONFIG_FALSE;
int ret_rt = CONFIG_FALSE;
- ret_def = config_lookup_int(&odp_global_data.libconfig_default, path,
+ ret_def = config_lookup_int(&odp_global_ro.libconfig_default, path,
value);
/* Runtime option overrides default value */
- ret_rt = config_lookup_int(&odp_global_data.libconfig_runtime, path,
+ ret_rt = config_lookup_int(&odp_global_ro.libconfig_runtime, path,
value);
return (ret_def == CONFIG_TRUE || ret_rt == CONFIG_TRUE) ? 1 : 0;
@@ -105,9 +105,9 @@ int _odp_libconfig_lookup_array(const char *path, int value[], int max_num)
for (j = 0; j < 2; j++) {
if (j == 0)
- config = &odp_global_data.libconfig_default;
+ config = &odp_global_ro.libconfig_default;
else
- config = &odp_global_data.libconfig_runtime;
+ config = &odp_global_ro.libconfig_runtime;
setting = config_lookup(config, path);
@@ -162,11 +162,11 @@ int _odp_libconfig_lookup_ext_int(const char *base_path,
const char *name,
int *value)
{
- if (lookup_int(&odp_global_data.libconfig_runtime,
+ if (lookup_int(&odp_global_ro.libconfig_runtime,
base_path, local_path, name, value))
return 1;
- if (lookup_int(&odp_global_data.libconfig_default,
+ if (lookup_int(&odp_global_ro.libconfig_default,
base_path, local_path, name, value))
return 1;
diff --git a/platform/linux-generic/odp_pcapng.c b/platform/linux-generic/odp_pcapng.c
index b8d29e5a8..07784c17e 100644
--- a/platform/linux-generic/odp_pcapng.c
+++ b/platform/linux-generic/odp_pcapng.c
@@ -74,7 +74,7 @@ static void get_pcapng_fifo_name(char *pcapng_entry, size_t len,
char *pktio_name, int qidx)
{
snprintf(pcapng_entry, len, "%d-%s-flow-%d",
- odp_global_data.main_pid, pktio_name, qidx);
+ odp_global_ro.main_pid, pktio_name, qidx);
pcapng_entry[len - 1] = 0;
}
@@ -120,13 +120,13 @@ static void *inotify_update(void *arg)
while (1) {
offset = 0;
FD_ZERO(&rfds);
- FD_SET(odp_global_data.inotify_pcapng_fd, &rfds);
+ FD_SET(odp_global_ro.inotify_pcapng_fd, &rfds);
time.tv_sec = 2;
time.tv_usec = 0;
- select(odp_global_data.inotify_pcapng_fd + 1, &rfds, NULL,
+ select(odp_global_ro.inotify_pcapng_fd + 1, &rfds, NULL,
NULL, &time);
- if (FD_ISSET(odp_global_data.inotify_pcapng_fd, &rfds)) {
- rdlen = read(odp_global_data.inotify_pcapng_fd,
+ if (FD_ISSET(odp_global_ro.inotify_pcapng_fd, &rfds)) {
+ rdlen = read(odp_global_ro.inotify_pcapng_fd,
buffer, INOTIFY_BUF_LEN);
while (offset < rdlen) {
int qidx;
@@ -219,23 +219,23 @@ int pcapng_prepare(pktio_entry_t *entry)
}
/* already running from a previous pktio */
- if (odp_global_data.inotify_pcapng_is_running == 1)
+ if (odp_global_ro.inotify_pcapng_is_running == 1)
return 0;
- odp_global_data.inotify_pcapng_fd = -1;
- odp_global_data.inotify_watch_fd = -1;
+ odp_global_ro.inotify_pcapng_fd = -1;
+ odp_global_ro.inotify_watch_fd = -1;
- odp_global_data.inotify_pcapng_fd = inotify_init();
- if (odp_global_data.inotify_pcapng_fd == -1) {
+ odp_global_ro.inotify_pcapng_fd = inotify_init();
+ if (odp_global_ro.inotify_pcapng_fd == -1) {
ODP_ERR("can't init inotify. pcap disabled\n");
goto out_destroy;
}
- odp_global_data.inotify_watch_fd =
- inotify_add_watch(odp_global_data.inotify_pcapng_fd,
+ odp_global_ro.inotify_watch_fd =
+ inotify_add_watch(odp_global_ro.inotify_pcapng_fd,
PCAPNG_WATCH_DIR, IN_CLOSE | IN_OPEN);
- if (odp_global_data.inotify_watch_fd == -1) {
+ if (odp_global_ro.inotify_watch_fd == -1) {
ODP_ERR("can't register inotify for %s. pcap disabled\n",
strerror(errno));
goto out_destroy;
@@ -243,12 +243,12 @@ int pcapng_prepare(pktio_entry_t *entry)
/* create a thread to poll inotify triggers */
pthread_attr_init(&attr);
- ret = pthread_create(&odp_global_data.inotify_thread, &attr,
+ ret = pthread_create(&odp_global_ro.inotify_thread, &attr,
inotify_update, entry);
if (ret)
ODP_ERR("can't start inotify thread. pcap disabled\n");
else
- odp_global_data.inotify_pcapng_is_running = 1;
+ odp_global_ro.inotify_pcapng_is_running = 1;
return ret;
@@ -265,24 +265,24 @@ void pcapng_destroy(pktio_entry_t *entry)
unsigned int max_queue =
MAX(entry->s.num_in_queue, entry->s.num_out_queue);
- if (odp_global_data.inotify_pcapng_is_running == 1) {
- ret = pthread_cancel(odp_global_data.inotify_thread);
+ if (odp_global_ro.inotify_pcapng_is_running == 1) {
+ ret = pthread_cancel(odp_global_ro.inotify_thread);
if (ret)
ODP_ERR("can't cancel inotify thread %s\n",
strerror(errno));
}
/* fd's will be -1 in case of any failure */
- ret = inotify_rm_watch(odp_global_data.inotify_pcapng_fd,
- odp_global_data.inotify_watch_fd);
+ ret = inotify_rm_watch(odp_global_ro.inotify_pcapng_fd,
+ odp_global_ro.inotify_watch_fd);
if (ret)
ODP_ERR("can't deregister inotify %s\n", strerror(errno));
- if (odp_global_data.inotify_pcapng_fd != -1)
- close(odp_global_data.inotify_pcapng_fd);
+ if (odp_global_ro.inotify_pcapng_fd != -1)
+ close(odp_global_ro.inotify_pcapng_fd);
- if (odp_global_data.inotify_watch_fd != -1)
- close(odp_global_data.inotify_watch_fd);
+ if (odp_global_ro.inotify_watch_fd != -1)
+ close(odp_global_ro.inotify_watch_fd);
for (i = 0; i < max_queue; i++) {
char pcapng_name[128];
diff --git a/platform/linux-generic/odp_pool.c b/platform/linux-generic/odp_pool.c
index 5cb423b95..bb6aa98b6 100644
--- a/platform/linux-generic/odp_pool.c
+++ b/platform/linux-generic/odp_pool.c
@@ -595,7 +595,7 @@ odp_pool_t odp_pool_create(const char *name, odp_pool_param_t *params)
if (params->type == ODP_POOL_PACKET)
shm_flags = ODP_SHM_PROC;
- if (odp_global_data.shm_single_va)
+ if (odp_global_ro.shm_single_va)
shm_flags |= ODP_SHM_SINGLE_VA;
return pool_create(name, params, shm_flags);
diff --git a/platform/linux-generic/odp_shared_memory.c b/platform/linux-generic/odp_shared_memory.c
index 7bd323c93..5345cee82 100644
--- a/platform/linux-generic/odp_shared_memory.c
+++ b/platform/linux-generic/odp_shared_memory.c
@@ -49,7 +49,7 @@ int odp_shm_capability(odp_shm_capability_t *capa)
memset(capa, 0, sizeof(odp_shm_capability_t));
capa->max_blocks = ODP_CONFIG_SHM_BLOCKS;
- capa->max_size = odp_global_data.shm_max_size;
+ capa->max_size = odp_global_ro.shm_max_size;
capa->max_align = 0;
return 0;
diff --git a/platform/linux-generic/odp_system_info.c b/platform/linux-generic/odp_system_info.c
index 608fa51e5..733c35287 100644
--- a/platform/linux-generic/odp_system_info.c
+++ b/platform/linux-generic/odp_system_info.c
@@ -47,7 +47,7 @@
*/
static int sysconf_cpu_count(void)
{
- return odp_global_data.num_cpus_installed;
+ return odp_global_ro.num_cpus_installed;
}
#if defined __x86_64__ || defined __i386__ || defined __OCTEON__ || \
@@ -339,16 +339,16 @@ int odp_system_info_init(void)
int i;
FILE *file;
- memset(&odp_global_data.system_info, 0, sizeof(system_info_t));
+ memset(&odp_global_ro.system_info, 0, sizeof(system_info_t));
- odp_global_data.system_info.page_size = ODP_PAGE_SIZE;
+ odp_global_ro.system_info.page_size = ODP_PAGE_SIZE;
/* By default, read max frequency from a cpufreq file */
for (i = 0; i < CONFIG_NUM_CPU; i++) {
uint64_t cpu_hz_max = read_cpufreq("cpuinfo_max_freq", i);
if (cpu_hz_max)
- odp_global_data.system_info.cpu_hz_max[i] = cpu_hz_max;
+ odp_global_ro.system_info.cpu_hz_max[i] = cpu_hz_max;
}
file = fopen("/proc/cpuinfo", "rt");
@@ -358,16 +358,16 @@ int odp_system_info_init(void)
}
/* Read CPU model, and set max cpu frequency if not set from cpufreq. */
- cpuinfo_parser(file, &odp_global_data.system_info);
+ cpuinfo_parser(file, &odp_global_ro.system_info);
fclose(file);
- if (systemcpu(&odp_global_data.system_info)) {
+ if (systemcpu(&odp_global_ro.system_info)) {
ODP_ERR("systemcpu failed\n");
return -1;
}
- system_hp(&odp_global_data.hugepage_info);
+ system_hp(&odp_global_ro.hugepage_info);
return 0;
}
@@ -377,7 +377,7 @@ int odp_system_info_init(void)
*/
int odp_system_info_term(void)
{
- free(odp_global_data.hugepage_info.default_huge_page_dir);
+ free(odp_global_ro.hugepage_info.default_huge_page_dir);
return 0;
}
@@ -417,14 +417,14 @@ uint64_t odp_cpu_hz_max(void)
uint64_t odp_cpu_hz_max_id(int id)
{
if (id >= 0 && id < CONFIG_NUM_CPU)
- return odp_global_data.system_info.cpu_hz_max[id];
+ return odp_global_ro.system_info.cpu_hz_max[id];
else
return 0;
}
uint64_t odp_sys_huge_page_size(void)
{
- return odp_global_data.hugepage_info.default_huge_page_size;
+ return odp_global_ro.hugepage_info.default_huge_page_size;
}
static int pagesz_compare(const void *pagesz1, const void *pagesz2)
@@ -466,7 +466,7 @@ int odp_sys_huge_page_size_all(uint64_t size[], int num)
uint64_t odp_sys_page_size(void)
{
- return odp_global_data.system_info.page_size;
+ return odp_global_ro.system_info.page_size;
}
const char *odp_cpu_model_str(void)
@@ -477,19 +477,19 @@ const char *odp_cpu_model_str(void)
const char *odp_cpu_model_str_id(int id)
{
if (id >= 0 && id < CONFIG_NUM_CPU)
- return odp_global_data.system_info.model_str[id];
+ return odp_global_ro.system_info.model_str[id];
else
return NULL;
}
int odp_sys_cache_line_size(void)
{
- return odp_global_data.system_info.cache_line_size;
+ return odp_global_ro.system_info.cache_line_size;
}
int odp_cpu_count(void)
{
- return odp_global_data.system_info.cpu_count;
+ return odp_global_ro.system_info.cpu_count;
}
void odp_sys_info_print(void)
diff --git a/platform/linux-generic/odp_timer.c b/platform/linux-generic/odp_timer.c
index 87d42f7c1..e8682237c 100644
--- a/platform/linux-generic/odp_timer.c
+++ b/platform/linux-generic/odp_timer.c
@@ -259,7 +259,7 @@ static odp_timer_pool_t timer_pool_new(const char *name,
size_t sz0, sz1, sz2;
uint32_t flags = ODP_SHM_SW_ONLY;
- if (odp_global_data.shm_single_va)
+ if (odp_global_ro.shm_single_va)
flags |= ODP_SHM_SINGLE_VA;
odp_ticketlock_lock(&timer_global.lock);
diff --git a/platform/linux-generic/odp_traffic_mngr.c b/platform/linux-generic/odp_traffic_mngr.c
index 7ca1a4ce4..cf2ce83e4 100644
--- a/platform/linux-generic/odp_traffic_mngr.c
+++ b/platform/linux-generic/odp_traffic_mngr.c
@@ -2346,7 +2346,7 @@ static void *tm_system_thread(void *arg)
uint32_t destroying, work_queue_cnt, timer_cnt;
int rc;
- rc = odp_init_local((odp_instance_t)odp_global_data.main_pid,
+ rc = odp_init_local((odp_instance_t)odp_global_ro.main_pid,
ODP_THREAD_WORKER);
ODP_ASSERT(rc == 0);
tm_group = arg;
diff --git a/platform/linux-generic/pktio/ipc.c b/platform/linux-generic/pktio/ipc.c
index 553ac4c39..74af0b975 100644
--- a/platform/linux-generic/pktio/ipc.c
+++ b/platform/linux-generic/pktio/ipc.c
@@ -233,7 +233,7 @@ static void _ipc_export_pool(struct pktio_info *pinfo,
snprintf(pinfo->slave.pool_name, ODP_POOL_NAME_LEN, "%s",
_ipc_odp_buffer_pool_shm_name(pool_hdl));
- pinfo->slave.pid = odp_global_data.main_pid;
+ pinfo->slave.pid = odp_global_ro.main_pid;
pinfo->slave.block_size = pool->block_size;
pinfo->slave.base_addr = pool->base_addr;
}
diff --git a/platform/linux-generic/pktio/ring.c b/platform/linux-generic/pktio/ring.c
index 6e03b44c4..488dc1a1f 100644
--- a/platform/linux-generic/pktio/ring.c
+++ b/platform/linux-generic/pktio/ring.c
@@ -172,7 +172,7 @@ _ring_create(const char *name, unsigned count, unsigned flags)
shm_flag = ODP_SHM_PROC | ODP_SHM_EXPORT;
else
shm_flag = 0;
- if (odp_global_data.shm_single_va)
+ if (odp_global_ro.shm_single_va)
shm_flag |= ODP_SHM_SINGLE_VA;
/* count must be a power of 2 */