lkml.org 
[lkml]   [2010]   [Mar]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[C/R v20][PATCH 16/96] cgroup freezer: Update stale locking comments
    Date
    From: Matt Helsley <matthltc@us.ibm.com>

    Update stale comments regarding locking order and add a little more detail
    so it's easier to follow the locking between the cgroup freezer and the
    power management freezer code.

    Signed-off-by: Matt Helsley <matthltc@us.ibm.com>
    Cc: Oren Laadan <orenl@cs.columbia.edu>
    Cc: Cedric Le Goater <legoater@free.fr>
    Cc: Paul Menage <menage@google.com>
    Cc: Li Zefan <lizf@cn.fujitsu.com>
    ---
    kernel/cgroup_freezer.c | 21 +++++++++++++--------
    1 files changed, 13 insertions(+), 8 deletions(-)

    diff --git a/kernel/cgroup_freezer.c b/kernel/cgroup_freezer.c
    index eb3f34d..2c44736 100644
    --- a/kernel/cgroup_freezer.c
    +++ b/kernel/cgroup_freezer.c
    @@ -88,10 +88,10 @@ struct cgroup_subsys freezer_subsys;

    /* Locks taken and their ordering
    * ------------------------------
    - * css_set_lock
    * cgroup_mutex (AKA cgroup_lock)
    - * task->alloc_lock (AKA task_lock)
    * freezer->lock
    + * css_set_lock
    + * task->alloc_lock (AKA task_lock)
    * task->sighand->siglock
    *
    * cgroup code forces css_set_lock to be taken before task->alloc_lock
    @@ -99,33 +99,38 @@ struct cgroup_subsys freezer_subsys;
    * freezer_create(), freezer_destroy():
    * cgroup_mutex [ by cgroup core ]
    *
    - * can_attach():
    - * cgroup_mutex
    + * freezer_can_attach():
    + * cgroup_mutex (held by caller of can_attach)
    *
    - * cgroup_frozen():
    + * cgroup_freezing_or_frozen():
    * task->alloc_lock (to get task's cgroup)
    *
    * freezer_fork() (preserving fork() performance means can't take cgroup_mutex):
    - * task->alloc_lock (to get task's cgroup)
    * freezer->lock
    * sighand->siglock (if the cgroup is freezing)
    *
    * freezer_read():
    * cgroup_mutex
    * freezer->lock
    + * write_lock css_set_lock (cgroup iterator start)
    + * task->alloc_lock
    * read_lock css_set_lock (cgroup iterator start)
    *
    * freezer_write() (freeze):
    * cgroup_mutex
    * freezer->lock
    + * write_lock css_set_lock (cgroup iterator start)
    + * task->alloc_lock
    * read_lock css_set_lock (cgroup iterator start)
    - * sighand->siglock
    + * sighand->siglock (fake signal delivery inside freeze_task())
    *
    * freezer_write() (unfreeze):
    * cgroup_mutex
    * freezer->lock
    + * write_lock css_set_lock (cgroup iterator start)
    + * task->alloc_lock
    * read_lock css_set_lock (cgroup iterator start)
    - * task->alloc_lock (to prevent races with freeze_task())
    + * task->alloc_lock (inside thaw_process(), prevents race with refrigerator())
    * sighand->siglock
    */
    static struct cgroup_subsys_state *freezer_create(struct cgroup_subsys *ss,
    --
    1.6.3.3


    \
     
     \ /
      Last update: 2010-03-17 17:37    [W:8.877 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site