X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Fserialize.c;h=4c23e8dd02451d46d6b8de34c418d40e872bc9f3;hb=5308038079d1b14a3fbaef282c39cced8444f5b3;hp=7f9ce5ad44f2a4f80cd77c68ca593fe0096120c8;hpb=b73a4c471dc987ea8548632dffb3c7050de77dd0;p=ust.git diff --git a/libust/serialize.c b/libust/serialize.c index 7f9ce5a..4c23e8d 100644 --- a/libust/serialize.c +++ b/libust/serialize.c @@ -41,6 +41,7 @@ #include "tracer.h" //#include "list.h" #include "usterr.h" +#include "ust_snprintf.h" enum ltt_type { LTT_TYPE_SIGNED_INT, @@ -537,7 +538,7 @@ notrace size_t ltt_serialize_data(struct ust_buffer *buf, size_t buf_offset, ++fmt; /* skip first '%' */ if (*fmt == '%') /* Escaped %% */ break; - fmt = parse_c_type(fmt, &c_size, &c_type); + fmt = parse_c_type(fmt, &c_size, &c_type, NULL); /* * Output c types if no trace types has been * specified. @@ -622,11 +623,11 @@ notrace void ltt_vtrace(const struct marker *mdata, void *probe_data, return; rcu_read_lock(); //ust// rcu_read_lock_sched_notrace(); -//ust// cpu = smp_processor_id(); cpu = ust_get_cpu(); -//ust// __get_cpu_var(ltt_nesting)++; - /* FIXME: should nesting be per-cpu? */ - ltt_nesting++; + + /* Force volatile access. */ + STORE_SHARED(ltt_nesting, LOAD_SHARED(ltt_nesting) + 1); + barrier(); pdata = (struct ltt_active_marker *)probe_data; eID = mdata->event_id; @@ -709,10 +710,12 @@ notrace void ltt_vtrace(const struct marker *mdata, void *probe_data, va_end(args_copy); /* Out-of-order commit */ ltt_commit_slot(channel, buf, buf_offset, data_size, slot_size); - DBG("just commited event at offset %ld and size %zd", buf_offset, slot_size); + DBG("just commited event (%s/%s) at offset %ld and size %zd", mdata->channel, mdata->name, buf_offset, slot_size); } -//ust// __get_cpu_var(ltt_nesting)--; - ltt_nesting--; + + barrier(); + STORE_SHARED(ltt_nesting, LOAD_SHARED(ltt_nesting) - 1); + rcu_read_unlock(); //ust// rcu_read_unlock_sched_notrace(); } @@ -808,7 +811,7 @@ int serialize_to_text(char *outbuf, int bufsize, const char *fmt, va_list ap) outbuf = &false_buf; bufsize = 1; } - result = vsnprintf(outbuf, bufsize, new_fmt, ap); + result = ust_safe_vsnprintf(outbuf, bufsize, new_fmt, ap); return result; }