| From 55866a0fb283214e77dfdd6c5aab35971172f253 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> |
| |
| diff --git a/kernel/cgroup.c b/kernel/cgroup.c |
| index aa3bee5..11a8b34 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); |
| @@ -3153,11 +3153,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 */ |
| @@ -3693,13 +3693,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); |
| } |
| @@ -3749,7 +3749,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; |
| @@ -3758,7 +3758,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; |
| @@ -3788,9 +3788,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.1.1 |
| |