lkml.org 
[lkml]   [2017]   [Aug]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:locking/core] cpuset: Make nr_cpusets private
    Commit-ID:  be040bea9085a9c2b1700c9e60888777baeb96d5
    Gitweb: http://git.kernel.org/tip/be040bea9085a9c2b1700c9e60888777baeb96d5
    Author: Paolo Bonzini <pbonzini@redhat.com>
    AuthorDate: Tue, 1 Aug 2017 17:24:06 +0200
    Committer: Ingo Molnar <mingo@kernel.org>
    CommitDate: Thu, 10 Aug 2017 12:28:57 +0200

    cpuset: Make nr_cpusets private

    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.

    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: Zefan Li <lizefan@huawei.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/1501601046-35683-4-git-send-email-pbonzini@redhat.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    ---
    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 898cfe2..e74655d 100644
    --- a/include/linux/cpuset.h
    +++ b/include/linux/cpuset.h
    @@ -37,12 +37,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_pre_enable_key);
    diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
    index 8d51516..9ed6a05 100644
    --- a/kernel/cgroup/cpuset.c
    +++ b/kernel/cgroup/cpuset.c
    @@ -577,6 +577,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()
    *
    \
     
     \ /
      Last update: 2017-08-10 14:17    [W:2.339 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site