I'm wondering the use case for asking only the default number of CPUs suitable 
for worker threads (without asking CPU IDs).

I think application should ask the mask (and number of cpus) once and store the 
information for later use.


-Petri


> -----Original Message-----
> From: lng-odp [mailto:[email protected]] On Behalf Of
> ext Maxim Uvarov
> Sent: Tuesday, September 08, 2015 1:31 PM
> To: [email protected]
> Subject: [lng-odp] [API-NEXT PATCH 3/4] api: odp_cpumask_default_ mask
> argument can be null
> 
> 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
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to