[PATCH] cpuset: skip rcu check if task is in root cpuset
For systems that aren't using cpusets, but have them CONFIG_CPUSET enabled in their kernel (eventually this may be most distribution kernels), this patch removes even the minimal rcu_read_lock() from the memory page allocation path. Actually, it removes that rcu call for any task that is in the root cpuset (top_cpuset), which on systems not actively using cpusets, is all tasks. We don't need the rcu check for tasks in the top_cpuset, because the top_cpuset is statically allocated, so at no risk of being freed out from underneath us. Signed-off-by: Paul Jackson <pj@sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
7edc59628b
commit
03a285f580
1 changed files with 9 additions and 4 deletions
|
@ -647,10 +647,15 @@ void cpuset_update_task_memory_state()
|
|||
struct task_struct *tsk = current;
|
||||
struct cpuset *cs;
|
||||
|
||||
rcu_read_lock();
|
||||
cs = rcu_dereference(tsk->cpuset);
|
||||
my_cpusets_mem_gen = cs->mems_generation;
|
||||
rcu_read_unlock();
|
||||
if (tsk->cpuset == &top_cpuset) {
|
||||
/* Don't need rcu for top_cpuset. It's never freed. */
|
||||
my_cpusets_mem_gen = top_cpuset.mems_generation;
|
||||
} else {
|
||||
rcu_read_lock();
|
||||
cs = rcu_dereference(tsk->cpuset);
|
||||
my_cpusets_mem_gen = cs->mems_generation;
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
if (my_cpusets_mem_gen != tsk->cpuset_mems_generation) {
|
||||
down(&callback_sem);
|
||||
|
|
Loading…
Reference in a new issue