Functions odp_cpumask_default_worker and odp_cpumask_default_control
can be used for calculation number of worker and control threads. In
that case mask parameter can be optional.

Signed-off-by: Maxim Uvarov <[email protected]>
---
 include/odp/api/cpumask.h                 |  2 +-
 platform/linux-generic/odp_cpumask_task.c | 14 +++++++++-----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/include/odp/api/cpumask.h b/include/odp/api/cpumask.h
index 4835a6c..633e106 100644
--- a/include/odp/api/cpumask.h
+++ b/include/odp/api/cpumask.h
@@ -199,7 +199,7 @@ int odp_cpumask_next(const odp_cpumask_t *mask, int cpu);
  * Initializes cpumask with CPUs available for worker threads. Sets up to 'num'
  * CPUs and returns the count actually set. Use zero for all available CPUs.
  *
- * @param[out] mask      CPU mask to initialize
+ * @param[out] mask      CPU mask to initialize or NULL.
  * @param      num       Number of worker threads, zero for all available CPUs
  * @return Actual number of CPUs used to create the mask
  */
diff --git a/platform/linux-generic/odp_cpumask_task.c 
b/platform/linux-generic/odp_cpumask_task.c
index 535891c..f8e4da4 100644
--- a/platform/linux-generic/odp_cpumask_task.c
+++ b/platform/linux-generic/odp_cpumask_task.c
@@ -23,7 +23,8 @@ int odp_cpumask_default_worker(odp_cpumask_t *mask, int num)
        if (ret != 0)
                ODP_ABORT("failed to read CPU affinity value\n");
 
-       odp_cpumask_zero(mask);
+       if (mask)
+               odp_cpumask_zero(mask);
 
        /*
         * If no user supplied number or it's too large, then attempt
@@ -35,7 +36,8 @@ int odp_cpumask_default_worker(odp_cpumask_t *mask, int num)
        /* build the mask, allocating down from highest numbered CPU */
        for (cpu = 0, i = CPU_SETSIZE - 1; i >= 0 && cpu < num; --i) {
                if (CPU_ISSET(i, &cpuset)) {
-                       odp_cpumask_set(mask, i);
+                       if (mask)
+                               odp_cpumask_set(mask, i);
                        cpu++;
                }
        }
@@ -45,8 +47,10 @@ int odp_cpumask_default_worker(odp_cpumask_t *mask, int num)
 
 int odp_cpumask_default_control(odp_cpumask_t *mask, int num ODP_UNUSED)
 {
-       odp_cpumask_zero(mask);
-       /* By default all control threads on CPU 0 */
-       odp_cpumask_set(mask, 0);
+       if (mask) {
+               odp_cpumask_zero(mask);
+               /* By default all control threads on CPU 0 */
+               odp_cpumask_set(mask, 0);
+       }
        return 1;
 }
-- 
1.9.1

_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to