| From 5a748a9ec22fe92dfb4197b5b9d4c308a47c7d8c Mon Sep 17 00:00:00 2001 |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Sat, 25 Jul 2009 16:47:45 +0200 |
| Subject: [PATCH] sched: Convert cgroups release_list_lock to raw_spinlock |
| |
| commit 58814bae5de64d5291b813ea0a52192e4fa714ad in tip. |
| |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| --- |
| kernel/cgroup.c | 18 +++++++++--------- |
| 1 files changed, 9 insertions(+), 9 deletions(-) |
| |
| diff --git a/kernel/cgroup.c b/kernel/cgroup.c |
| index 6d870f2..c068178 100644 |
| --- a/kernel/cgroup.c |
| +++ b/kernel/cgroup.c |
| @@ -258,7 +258,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); |
| @@ -3535,11 +3535,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 */ |
| @@ -4296,13 +4296,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); |
| } |
| @@ -4354,7 +4354,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; |
| @@ -4363,7 +4363,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; |
| @@ -4393,9 +4393,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.7.0.4 |
| |