• Tejun Heo's avatar
    sched, cgroup: reorganize threadgroup locking · 034dd596
    Tejun Heo authored
    [ Upstream commit 7d7efec3 ]
    
    threadgroup_change_begin/end() are used to mark the beginning and end
    of threadgroup modifying operations to allow code paths which require
    a threadgroup to stay stable across blocking operations to synchronize
    against those sections using threadgroup_lock/unlock().
    
    It's currently implemented as a general mechanism in sched.h using
    per-signal_struct rwsem; however, this never grew non-cgroup use cases
    and becomes noop if !CONFIG_CGROUPS.  It turns out that cgroups is
    gonna be better served with a different sycnrhonization scheme and is
    a bit silly to keep cgroups specific details as a general mechanism.
    
    What's general here is identifying the places where threadgroups are
    modified.  This patch restructures threadgroup locking so that
    threadgroup_change_begin/end() become a place where subsystems which
    need to sycnhronize against threadgroup changes can hook into.
    
    cgroup_threadgroup_change_begin/end() which operate on the
    per-signal_struct rwsem are created and threadgroup_lock/unlock() are
    moved to cgroup.c and made static.
    
    This is pure reorganization which doesn't cause any functional
    changes.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
    034dd596
cgroup.c 151 KB