aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/odp_cpumask.c
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linux-generic/odp_cpumask.c')
-rw-r--r--platform/linux-generic/odp_cpumask.c66
1 files changed, 31 insertions, 35 deletions
diff --git a/platform/linux-generic/odp_cpumask.c b/platform/linux-generic/odp_cpumask.c
index 64559a6d5..778a851a3 100644
--- a/platform/linux-generic/odp_cpumask.c
+++ b/platform/linux-generic/odp_cpumask.c
@@ -1,17 +1,16 @@
-/* Copyright (c) 2013, Linaro Limited
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2013-2018 Linaro Limited
*/
#include <odp_posix_extensions.h>
#include <sched.h>
-#include <pthread.h>
#include <odp/api/cpumask.h>
#include <odp/api/init.h>
#include <odp_debug_internal.h>
+#include <odp_global_data.h>
+#include <odp_init_internal.h>
#include <stdlib.h>
#include <string.h>
@@ -227,33 +226,30 @@ int odp_cpumask_next(const odp_cpumask_t *mask, int cpu)
*/
static int get_available_cpus(void)
{
- int cpu_idnum;
cpu_set_t cpuset;
- int ret;
+ int cpu, 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.all_cpus);
CPU_ZERO(&cpuset);
ret = sched_getaffinity(0, sizeof(cpuset), &cpuset);
if (ret < 0) {
- ODP_ERR("Failed to get cpu affinity");
+ _ODP_ERR("Failed to get cpu affinity");
return -1;
}
- for (cpu_idnum = 0; cpu_idnum < CPU_SETSIZE - 1; cpu_idnum++) {
- if (CPU_ISSET(cpu_idnum, &cpuset)) {
- odp_global_data.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);
+ for (cpu = 0; cpu < CPU_SETSIZE - 1; cpu++) {
+ if (CPU_ISSET(cpu, &cpuset)) {
+ odp_global_ro.num_cpus_installed++;
+ odp_cpumask_set(&odp_global_ro.all_cpus, cpu);
}
}
+ /* Initialize control and worker masks with all CPUs */
+ odp_cpumask_copy(&odp_global_ro.control_cpus, &odp_global_ro.all_cpus);
+ odp_cpumask_copy(&odp_global_ro.worker_cpus, &odp_global_ro.all_cpus);
+
return 0;
}
@@ -265,8 +261,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) */
@@ -277,7 +273,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.
@@ -290,7 +286,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);
}
@@ -299,7 +295,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);
@@ -307,7 +303,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 {
@@ -333,8 +329,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) */
@@ -344,10 +340,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
@@ -359,7 +355,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);
@@ -367,7 +363,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);
@@ -380,10 +376,10 @@ static void init_default_worker_cpumask(int control_cpus_default)
* It also allows the default cpumasks to be overridden by
* externally specified cpumasks passed in as initialization parameters.
*/
-int odp_cpumask_init_global(const odp_init_t *params)
+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;
@@ -449,7 +445,7 @@ int odp_cpumask_init_global(const odp_init_t *params)
}
}
-int odp_cpumask_term_global(void)
+int _odp_cpumask_term_global(void)
{
return 0;
}