aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/perf_counter.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/perf_counter.h')
-rw-r--r--include/linux/perf_counter.h22
1 files changed, 10 insertions, 12 deletions
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h
index 90cce0c74a03..f2b914de3f0c 100644
--- a/include/linux/perf_counter.h
+++ b/include/linux/perf_counter.h
@@ -167,30 +167,28 @@ struct perf_counter_mmap_page {
167 /* 167 /*
168 * Bits needed to read the hw counters in user-space. 168 * Bits needed to read the hw counters in user-space.
169 * 169 *
170 * The index and offset should be read atomically using the seqlock: 170 * u32 seq;
171 * 171 * s64 count;
172 * __u32 seq, index;
173 * __s64 offset;
174 * 172 *
175 * again: 173 * again:
176 * rmb();
177 * seq = pc->lock; 174 * seq = pc->lock;
178 *
179 * if (unlikely(seq & 1)) { 175 * if (unlikely(seq & 1)) {
180 * cpu_relax(); 176 * cpu_relax();
181 * goto again; 177 * goto again;
182 * } 178 * }
183 * 179 *
184 * index = pc->index; 180 * if (pc->index) {
185 * offset = pc->offset; 181 * count = pmc_read(pc->index - 1);
182 * count += pc->offset;
183 * } else
184 * goto regular_read;
186 * 185 *
187 * rmb(); 186 * barrier();
188 * if (pc->lock != seq) 187 * if (pc->lock != seq)
189 * goto again; 188 * goto again;
190 * 189 *
191 * After this, index contains architecture specific counter index + 1, 190 * NOTE: for obvious reason this only works on self-monitoring
192 * so that 0 means unavailable, offset contains the value to be added 191 * processes.
193 * to the result of the raw timer read to obtain this counter's value.
194 */ 192 */
195 __u32 lock; /* seqlock for synchronization */ 193 __u32 lock; /* seqlock for synchronization */
196 __u32 index; /* hardware counter identifier */ 194 __u32 index; /* hardware counter identifier */