perf_counter: update mmap() counter read, take 2
[deliverable/linux.git] / include / linux / perf_counter.h
index f2b914de3f0c784fa2f3a1363f5c8f5b85e30935..e22ab47a2f41741bcdca3e4c9bfc0346ee1dd312 100644 (file)
@@ -170,22 +170,18 @@ struct perf_counter_mmap_page {
         *   u32 seq;
         *   s64 count;
         *
-        * again:
-        *   seq = pc->lock;
-        *   if (unlikely(seq & 1)) {
-        *     cpu_relax();
-        *     goto again;
-        *   }
+        *   do {
+        *     seq = pc->lock;
         *
-        *   if (pc->index) {
-        *     count = pmc_read(pc->index - 1);
-        *     count += pc->offset;
-        *   } else
-        *     goto regular_read;
+        *     barrier()
+        *     if (pc->index) {
+        *       count = pmc_read(pc->index - 1);
+        *       count += pc->offset;
+        *     } else
+        *       goto regular_read;
         *
-        *   barrier();
-        *   if (pc->lock != seq)
-        *     goto again;
+        *     barrier();
+        *   } while (pc->lock != seq);
         *
         * NOTE: for obvious reason this only works on self-monitoring
         *       processes.
This page took 0.026597 seconds and 5 git commands to generate.