lkml.org 
[lkml]   [2010]   [Jan]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 19/26] cgroups: Convert cgroups release_list_lock to raw_spinlock

    ----- "Paul Menage" <menage@google.com> wrote:

    > Does this patch take the lock out of the scope of lockdep? Or is
    > raw_spinlock still high-level enough to support lockdep?

    lockdep should work as before - in fact everything should work as before.
    This is pretty much a no-op until preempt-rt changes are pushed upstream.
    >
    > Paul
    >
    > On Mon, Jan 11, 2010 at 1:26 PM, John Kacur <jkacur@redhat.com>
    > wrote:
    > > Convert locks which cannot sleep in preempt-rt to raw_spinlocks
    > >
    > > See also 58814bae5de64d5291b813ea0a52192e4fa714ad
    > >
    > > Signed-off-by: John Kacur <jkacur@redhat.com>
    > > ---
    > >  kernel/cgroup.c |   18 +++++++++---------
    > >  1 files changed, 9 insertions(+), 9 deletions(-)
    > >
    > > diff --git a/kernel/cgroup.c b/kernel/cgroup.c
    > > index 0249f4b..32a80b2 100644
    > > --- a/kernel/cgroup.c
    > > +++ b/kernel/cgroup.c
    > > @@ -204,7 +204,7 @@ list_for_each_entry(_root, &roots, root_list)
    > >  /* the list of cgroups eligible for automatic release. Protected
    > by
    > >  * release_list_lock */
    > >  static LIST_HEAD(release_list);
    > > -static DEFINE_SPINLOCK(release_list_lock);
    > > +static DEFINE_RAW_SPINLOCK(release_list_lock);
    > >  static void cgroup_release_agent(struct work_struct *work);
    > >  static DECLARE_WORK(release_agent_work, cgroup_release_agent);
    > >  static void check_for_release(struct cgroup *cgrp);
    > > @@ -3151,11 +3151,11 @@ again:
    > >        finish_wait(&cgroup_rmdir_waitq, &wait);
    > >        clear_bit(CGRP_WAIT_ON_RMDIR, &cgrp->flags);
    > >
    > > -       spin_lock(&release_list_lock);
    > > +       raw_spin_lock(&release_list_lock);
    > >        set_bit(CGRP_REMOVED, &cgrp->flags);
    > >        if (!list_empty(&cgrp->release_list))
    > >                list_del(&cgrp->release_list);
    > > -       spin_unlock(&release_list_lock);
    > > +       raw_spin_unlock(&release_list_lock);
    > >
    > >        cgroup_lock_hierarchy(cgrp->root);
    > >        /* delete this cgroup from parent->children */
    > > @@ -3691,13 +3691,13 @@ static void check_for_release(struct cgroup
    > *cgrp)
    > >                 * already queued for a userspace notification,
    > queue
    > >                 * it now */
    > >                int need_schedule_work = 0;
    > > -               spin_lock(&release_list_lock);
    > > +               raw_spin_lock(&release_list_lock);
    > >                if (!cgroup_is_removed(cgrp) &&
    > >                    list_empty(&cgrp->release_list)) {
    > >                        list_add(&cgrp->release_list,
    > &release_list);
    > >                        need_schedule_work = 1;
    > >                }
    > > -               spin_unlock(&release_list_lock);
    > > +               raw_spin_unlock(&release_list_lock);
    > >                if (need_schedule_work)
    > >                        schedule_work(&release_agent_work);
    > >        }
    > > @@ -3747,7 +3747,7 @@ static void cgroup_release_agent(struct
    > work_struct *work)
    > >  {
    > >        BUG_ON(work != &release_agent_work);
    > >        mutex_lock(&cgroup_mutex);
    > > -       spin_lock(&release_list_lock);
    > > +       raw_spin_lock(&release_list_lock);
    > >        while (!list_empty(&release_list)) {
    > >                char *argv[3], *envp[3];
    > >                int i;
    > > @@ -3756,7 +3756,7 @@ static void cgroup_release_agent(struct
    > work_struct *work)
    > >                                                    struct cgroup,
    > >                                                    release_list);
    > >                list_del_init(&cgrp->release_list);
    > > -               spin_unlock(&release_list_lock);
    > > +               raw_spin_unlock(&release_list_lock);
    > >                pathbuf = kmalloc(PAGE_SIZE, GFP_KERNEL);
    > >                if (!pathbuf)
    > >                        goto continue_free;
    > > @@ -3786,9 +3786,9 @@ static void cgroup_release_agent(struct
    > work_struct *work)
    > >  continue_free:
    > >                kfree(pathbuf);
    > >                kfree(agentbuf);
    > > -               spin_lock(&release_list_lock);
    > > +               raw_spin_lock(&release_list_lock);
    > >        }
    > > -       spin_unlock(&release_list_lock);
    > > +       raw_spin_unlock(&release_list_lock);
    > >        mutex_unlock(&cgroup_mutex);
    > >  }
    > >
    > > --
    > > 1.6.5.2
    > >
    > > --
    > > To unsubscribe from this list: send the line "unsubscribe
    > linux-kernel" in
    > > the body of a message to majordomo@vger.kernel.org
    > > More majordomo info at  http://vger.kernel.org/majordomo-info.html
    > > Please read the FAQ at  http://www.tux.org/lkml/
    > >
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2010-01-11 23:13    [W:0.025 / U:121.288 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site