qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 3/4] trace: Clean up the "try to update atomic u


From: Harsh Bora
Subject: Re: [Qemu-devel] [PATCH 3/4] trace: Clean up the "try to update atomic until it worked" loops
Date: Thu, 31 Jan 2013 17:30:39 +0530
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120911 Thunderbird/15.0.1

On 01/25/2013 09:13 PM, Markus Armbruster wrote:
Signed-off-by: Markus Armbruster <address@hidden>
---
  trace/simple.c | 18 +++++-------------
  1 file changed, 5 insertions(+), 13 deletions(-)

Reviewed-by: Harsh Prateek Bora <address@hidden>


diff --git a/trace/simple.c b/trace/simple.c
index 592ff48..74701e3 100644
--- a/trace/simple.c
+++ b/trace/simple.c
@@ -171,13 +171,10 @@ static gpointer writeout_thread(gpointer opaque)
              dropped.rec.timestamp_ns = get_clock();
              dropped.rec.length = sizeof(TraceRecord) + sizeof(uint64_t),
              dropped.rec.reserved = 0;
-            while (1) {
+            do {
                  dropped_count = g_atomic_int_get(&dropped_events);
-                if (g_atomic_int_compare_and_exchange(&dropped_events,
-                                                      dropped_count, 0)) {
-                    break;
-                }
-            }
+            } while (!g_atomic_int_compare_and_exchange(&dropped_events,
+                                                        dropped_count, 0));
              dropped.rec.arguments[0] = dropped_count;
              unused = fwrite(&dropped.rec, dropped.rec.length, 1, trace_fp);
          }
@@ -213,7 +210,7 @@ int trace_record_start(TraceBufferRecord *rec, TraceEventID 
event, size_t datasi
      uint32_t rec_len = sizeof(TraceRecord) + datasize;
      uint64_t timestamp_ns = get_clock();

-    while (1) {
+    do {
          old_idx = g_atomic_int_get(&trace_idx);
          smp_rmb();
          new_idx = old_idx + rec_len;
@@ -223,12 +220,7 @@ int trace_record_start(TraceBufferRecord *rec, 
TraceEventID event, size_t datasi
              g_atomic_int_inc(&dropped_events);
              return -ENOSPC;
          }
-
-        if (g_atomic_int_compare_and_exchange(&trace_idx,
-                                              old_idx, new_idx)) {
-            break;
-        }
-    }
+    } while (!g_atomic_int_compare_and_exchange(&trace_idx, old_idx, new_idx));

      idx = old_idx % TRACE_BUF_LEN;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]