On 2017/8/1 23:24, Paolo Bonzini wrote:
> Any use of key->enabled (that is static_key_enabled and static_key_count)
> outside jump_label_lock should handle its own serialization.  In the case
> of cpusets_enabled_key, the key is always incremented/decremented under
> cpuset_mutex, and hence the same rule applies to nr_cpusets.  The rule
> *is* respected currently, but the mutex is static so nr_cpusets should
> be static too.
> 
> Cc: Peter Zijlstra <[email protected]>
> Cc: Zefan Li <[email protected]>
> Signed-off-by: Paolo Bonzini <[email protected]>

Acked-by: Zefan Li <[email protected]>

> ---
>  include/linux/cpuset.h | 6 ------
>  kernel/cgroup/cpuset.c | 7 +++++++
>  2 files changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h
> index 119a3f9604b0..cedcc910b7a7 100644
> --- a/include/linux/cpuset.h
> +++ b/include/linux/cpuset.h
> @@ -24,12 +24,6 @@ static inline bool cpusets_enabled(void)
>       return static_branch_unlikely(&cpusets_enabled_key);
>  }
>  
> -static inline int nr_cpusets(void)
> -{
> -     /* jump label reference count + the top-level cpuset */
> -     return static_key_count(&cpusets_enabled_key.key) + 1;
> -}
> -
>  static inline void cpuset_inc(void)
>  {
>       static_branch_inc(&cpusets_enabled_key);
> diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
> index ae643412948a..f65db17e9e23 100644
> --- a/kernel/cgroup/cpuset.c
> +++ b/kernel/cgroup/cpuset.c
> @@ -576,6 +576,13 @@ static void update_domain_attr_tree(struct 
> sched_domain_attr *dattr,
>       rcu_read_unlock();
>  }
>  
> +/* Must be called with cpuset_mutex held.  */
> +static inline int nr_cpusets(void)
> +{
> +     /* jump label reference count + the top-level cpuset */
> +     return static_key_count(&cpusets_enabled_key.key) + 1;
> +}
> +
>  /*
>   * generate_sched_domains()
>   *
> 

Reply via email to