From 3fd3f85332cd79d0d1d6675fbdcb768b7382129f Mon Sep 17 00:00:00 2001 From: Paul Jackson Date: Mon, 12 Sep 2005 04:30:30 -0700 Subject: [PATCH] --- yaml --- r: 8568 b: refs/heads/master c: b3426599af9524104be6938bcb1fcaab314781c7 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/linux/sched.h | 1 - trunk/kernel/cpuset.c | 13 +++++++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 7e68b23964e0..59ad40a1fe69 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f24ec7f6c6278c0ea4c00efe96d50b1e66796c44 +refs/heads/master: b3426599af9524104be6938bcb1fcaab314781c7 diff --git a/trunk/include/linux/sched.h b/trunk/include/linux/sched.h index ed3bb19d1337..38c8654aaa96 100644 --- a/trunk/include/linux/sched.h +++ b/trunk/include/linux/sched.h @@ -785,7 +785,6 @@ struct task_struct { short il_next; #endif #ifdef CONFIG_CPUSETS - short cpuset_sem_nest_depth; struct cpuset *cpuset; nodemask_t mems_allowed; int cpuset_mems_generation; diff --git a/trunk/kernel/cpuset.c b/trunk/kernel/cpuset.c index 407b5f0a8c8e..79866bc6b3a1 100644 --- a/trunk/kernel/cpuset.c +++ b/trunk/kernel/cpuset.c @@ -180,6 +180,8 @@ static struct super_block *cpuset_sb = NULL; */ static DECLARE_MUTEX(cpuset_sem); +static struct task_struct *cpuset_sem_owner; +static int cpuset_sem_depth; /* * The global cpuset semaphore cpuset_sem can be needed by the @@ -200,16 +202,19 @@ static DECLARE_MUTEX(cpuset_sem); static inline void cpuset_down(struct semaphore *psem) { - if (current->cpuset_sem_nest_depth == 0) + if (cpuset_sem_owner != current) { down(psem); - current->cpuset_sem_nest_depth++; + cpuset_sem_owner = current; + } + cpuset_sem_depth++; } static inline void cpuset_up(struct semaphore *psem) { - current->cpuset_sem_nest_depth--; - if (current->cpuset_sem_nest_depth == 0) + if (--cpuset_sem_depth == 0) { + cpuset_sem_owner = NULL; up(psem); + } } /*