diff options
author | Christoph Lameter <cl@linux.com> | 2010-12-08 10:22:55 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2010-12-17 09:07:19 -0500 |
commit | 909ea96468096b07fbb41aaf69be060d92bd9271 (patch) | |
tree | a7e015edd96b5f674874fe78cdd889769e130a2a /kernel/fork.c | |
parent | 780f36d8b3fa9572f731d4fb85067b2e45e6f993 (diff) |
core: Replace __get_cpu_var with __this_cpu_read if not used for an address.
__get_cpu_var() can be replaced with this_cpu_read and will then use a
single read instruction with implied address calculation to access the
correct per cpu instance.
However, the address of a per cpu variable passed to __this_cpu_read()
cannot be determined (since it's an implied address conversion through
segment prefixes). Therefore apply this only to uses of __get_cpu_var
where the address of the variable is not used.
Cc: Pekka Enberg <penberg@cs.helsinki.fi>
Cc: Hugh Dickins <hughd@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Acked-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'kernel/fork.c')
-rw-r--r-- | kernel/fork.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 3b159c5991b7..e05e27de67df 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -1282,7 +1282,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1282 | attach_pid(p, PIDTYPE_SID, task_session(current)); | 1282 | attach_pid(p, PIDTYPE_SID, task_session(current)); |
1283 | list_add_tail(&p->sibling, &p->real_parent->children); | 1283 | list_add_tail(&p->sibling, &p->real_parent->children); |
1284 | list_add_tail_rcu(&p->tasks, &init_task.tasks); | 1284 | list_add_tail_rcu(&p->tasks, &init_task.tasks); |
1285 | __get_cpu_var(process_counts)++; | 1285 | __this_cpu_inc(process_counts); |
1286 | } | 1286 | } |
1287 | attach_pid(p, PIDTYPE_PID, pid); | 1287 | attach_pid(p, PIDTYPE_PID, pid); |
1288 | nr_threads++; | 1288 | nr_threads++; |