提交 b6b2c962 编写于 作者: M Markus Armbruster 提交者: Stefan Hajnoczi

trace: Clean up the "try to update atomic until it worked" loops

Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
Reviewed-by: NLaszlo Ersek <lersek@redhat.com>
Reviewed-by: NHarsh Prateek Bora <harsh@linux.vnet.ibm.com>
Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
上级 e722d705
...@@ -171,13 +171,10 @@ static gpointer writeout_thread(gpointer opaque) ...@@ -171,13 +171,10 @@ static gpointer writeout_thread(gpointer opaque)
dropped.rec.timestamp_ns = get_clock(); dropped.rec.timestamp_ns = get_clock();
dropped.rec.length = sizeof(TraceRecord) + sizeof(uint64_t), dropped.rec.length = sizeof(TraceRecord) + sizeof(uint64_t),
dropped.rec.reserved = 0; dropped.rec.reserved = 0;
while (1) { do {
dropped_count = g_atomic_int_get(&dropped_events); dropped_count = g_atomic_int_get(&dropped_events);
if (g_atomic_int_compare_and_exchange(&dropped_events, } while (!g_atomic_int_compare_and_exchange(&dropped_events,
dropped_count, 0)) { dropped_count, 0));
break;
}
}
dropped.rec.arguments[0] = dropped_count; dropped.rec.arguments[0] = dropped_count;
unused = fwrite(&dropped.rec, dropped.rec.length, 1, trace_fp); 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 ...@@ -213,7 +210,7 @@ int trace_record_start(TraceBufferRecord *rec, TraceEventID event, size_t datasi
uint32_t rec_len = sizeof(TraceRecord) + datasize; uint32_t rec_len = sizeof(TraceRecord) + datasize;
uint64_t timestamp_ns = get_clock(); uint64_t timestamp_ns = get_clock();
while (1) { do {
old_idx = g_atomic_int_get(&trace_idx); old_idx = g_atomic_int_get(&trace_idx);
smp_rmb(); smp_rmb();
new_idx = old_idx + rec_len; new_idx = old_idx + rec_len;
...@@ -223,12 +220,7 @@ int trace_record_start(TraceBufferRecord *rec, TraceEventID event, size_t datasi ...@@ -223,12 +220,7 @@ int trace_record_start(TraceBufferRecord *rec, TraceEventID event, size_t datasi
g_atomic_int_inc(&dropped_events); g_atomic_int_inc(&dropped_events);
return -ENOSPC; return -ENOSPC;
} }
} while (!g_atomic_int_compare_and_exchange(&trace_idx, old_idx, new_idx));
if (g_atomic_int_compare_and_exchange(&trace_idx,
old_idx, new_idx)) {
break;
}
}
idx = old_idx % TRACE_BUF_LEN; idx = old_idx % TRACE_BUF_LEN;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册