aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Lameter <cl@linux.com>2014-12-12 19:58:45 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-12-13 15:42:53 -0500
commit7d94a82e45157318568d839902f46b2085de9e90 (patch)
tree80e8d6490f2bb702cdc1cb296a874afa33ccf73e
parent6c51ec4d18d24b2ffa69de5d60bebaeb4f8e2398 (diff)
percpu: update local_ops.txt to reflect this_cpu operations
Update the documentation to reflect changes due to the availability of this_cpu operations. Signed-off-by: Christoph Lameter <cl@linux.com> Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--Documentation/local_ops.txt13
1 files changed, 9 insertions, 4 deletions
diff --git a/Documentation/local_ops.txt b/Documentation/local_ops.txt
index 300da4bdfdbd..407576a23317 100644
--- a/Documentation/local_ops.txt
+++ b/Documentation/local_ops.txt
@@ -8,6 +8,11 @@ to implement them for any given architecture and shows how they can be used
8properly. It also stresses on the precautions that must be taken when reading 8properly. It also stresses on the precautions that must be taken when reading
9those local variables across CPUs when the order of memory writes matters. 9those local variables across CPUs when the order of memory writes matters.
10 10
11Note that local_t based operations are not recommended for general kernel use.
12Please use the this_cpu operations instead unless there is really a special purpose.
13Most uses of local_t in the kernel have been replaced by this_cpu operations.
14this_cpu operations combine the relocation with the local_t like semantics in
15a single instruction and yield more compact and faster executing code.
11 16
12 17
13* Purpose of local atomic operations 18* Purpose of local atomic operations
@@ -87,10 +92,10 @@ the per cpu variable. For instance :
87 local_inc(&get_cpu_var(counters)); 92 local_inc(&get_cpu_var(counters));
88 put_cpu_var(counters); 93 put_cpu_var(counters);
89 94
90If you are already in a preemption-safe context, you can directly use 95If you are already in a preemption-safe context, you can use
91__get_cpu_var() instead. 96this_cpu_ptr() instead.
92 97
93 local_inc(&__get_cpu_var(counters)); 98 local_inc(this_cpu_ptr(&counters));
94 99
95 100
96 101
@@ -134,7 +139,7 @@ static void test_each(void *info)
134{ 139{
135 /* Increment the counter from a non preemptible context */ 140 /* Increment the counter from a non preemptible context */
136 printk("Increment on cpu %d\n", smp_processor_id()); 141 printk("Increment on cpu %d\n", smp_processor_id());
137 local_inc(&__get_cpu_var(counters)); 142 local_inc(this_cpu_ptr(&counters));
138 143
139 /* This is what incrementing the variable would look like within a 144 /* This is what incrementing the variable would look like within a
140 * preemptible context (it disables preemption) : 145 * preemptible context (it disables preemption) :