X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=libust%2Fbuffers.c;h=849cad7ad9326031cf7a42ef0a086f60d8b3300b;hb=1e8c9e7b5464b708572fe0d28f9d8bf572784e45;hp=12753c1961345f4430779ef8d1a69f48ce2aaf21;hpb=b73a4c471dc987ea8548632dffb3c7050de77dd0;p=ust.git diff --git a/libust/buffers.c b/libust/buffers.c index 12753c1..849cad7 100644 --- a/libust/buffers.c +++ b/libust/buffers.c @@ -307,8 +307,9 @@ static void ltt_buffer_begin(struct ust_buffer *buf, subbuf_idx * buf->chan->subbuf_size); header->cycle_count_begin = tsc; - header->lost_size = 0xFFFFFFFF; /* for debugging */ - header->buf_size = buf->chan->subbuf_size; + header->data_size = 0xFFFFFFFF; /* for recognizing crashed buffers */ + header->sb_size = 0xFFFFFFFF; /* for recognizing crashed buffers */ + /* FIXME: add memory barrier? */ ltt_write_trace_header(channel->trace, header); } @@ -323,9 +324,10 @@ static notrace void ltt_buffer_end(struct ust_buffer *buf, (struct ltt_subbuffer_header *) ust_buffers_offset_address(buf, subbuf_idx * buf->chan->subbuf_size); + u32 data_size = SUBBUF_OFFSET(offset - 1, buf->chan) + 1; - header->lost_size = SUBBUF_OFFSET((buf->chan->subbuf_size - offset), - buf->chan); + header->data_size = data_size; + header->sb_size = PAGE_ALIGN(data_size); header->cycle_count_end = tsc; header->events_lost = local_read(&buf->events_lost); header->subbuf_corrupt = local_read(&buf->corrupted_subbuffers); @@ -346,10 +348,10 @@ static notrace void ltt_buf_unfull(struct ust_buffer *buf, * architecture does not reorder writes. This should eventually be provided by * a separate architecture-specific infrastructure. */ -static void remote_mb(void *info) -{ - smp_mb(); -} +//ust// static void remote_mb(void *info) +//ust// { +//ust// smp_mb(); +//ust// } int ust_buffers_get_subbuf(struct ust_buffer *buf, long *consumed) { @@ -545,20 +547,20 @@ int ust_buffers_put_subbuf(struct ust_buffer *buf, unsigned long uconsumed_old) //ust// } //ust// } -static void ust_buffers_print_written(struct ust_channel *chan, - long cons_off, unsigned int cpu) -{ - struct ust_buffer *buf = chan->buf[cpu]; - long cons_idx, events_count; - - cons_idx = SUBBUF_INDEX(cons_off, chan); - events_count = local_read(&buf->commit_count[cons_idx].events); - - if (events_count) - printk(KERN_INFO - "channel %s: %lu events written (cpu %u, index %lu)\n", - chan->channel_name, events_count, cpu, cons_idx); -} +//ust// static void ust_buffers_print_written(struct ust_channel *chan, +//ust// long cons_off, unsigned int cpu) +//ust// { +//ust// struct ust_buffer *buf = chan->buf[cpu]; +//ust// long cons_idx, events_count; +//ust// +//ust// cons_idx = SUBBUF_INDEX(cons_off, chan); +//ust// events_count = local_read(&buf->commit_count[cons_idx].events); +//ust// +//ust// if (events_count) +//ust// printk(KERN_INFO +//ust// "channel %s: %lu events written (cpu %u, index %lu)\n", +//ust// chan->channel_name, events_count, cpu, cons_idx); +//ust// } static void ltt_relay_print_subbuffer_errors( struct ust_channel *channel, @@ -604,9 +606,9 @@ static void ltt_relay_print_errors(struct ust_trace *trace, if (!channel) return; - for (cons_off = 0; cons_off < rchan->alloc_size; - cons_off = SUBBUF_ALIGN(cons_off, rchan)) - ust_buffers_print_written(ltt_chan, cons_off, cpu); +//ust// for (cons_off = 0; cons_off < rchan->alloc_size; +//ust// cons_off = SUBBUF_ALIGN(cons_off, rchan)) +//ust// ust_buffers_print_written(ltt_chan, cons_off, cpu); for (cons_off = atomic_long_read(<t_buf->consumed); (SUBBUF_TRUNC(local_read(<t_buf->offset), channel) @@ -729,6 +731,7 @@ static int ust_buffers_init_buffer(struct ust_trace *trace, //ust// if(!ltt_buf->commit_seq) { //ust// return -1; //ust// } + memset(buf->commit_seq, 0, sizeof(buf->commit_seq[0]) * n_subbufs); /* FIXME: decrementally destroy on error */ @@ -1356,7 +1359,7 @@ static void ltt_reserve_switch_old_subbuf( &buf->commit_count[oldidx].cc); commit_count = local_read(&buf->commit_count[oldidx].cc); ltt_check_deliver(chan, buf, offsets->old - 1, commit_count, oldidx); - ltt_write_commit_counter(buf, oldidx, + ltt_write_commit_counter(chan, buf, oldidx, offsets->old, commit_count, padding_size); } @@ -1387,7 +1390,7 @@ static void ltt_reserve_switch_new_subbuf( commit_count = local_read(&buf->commit_count[beginidx].cc); /* Check if the written buffer has to be delivered */ ltt_check_deliver(chan, buf, offsets->begin, commit_count, beginidx); - ltt_write_commit_counter(buf, beginidx, + ltt_write_commit_counter(chan, buf, beginidx, offsets->begin, commit_count, ltt_subbuffer_header_size()); } @@ -1433,7 +1436,7 @@ static void ltt_reserve_end_switch_current( commit_count = local_read(&buf->commit_count[endidx].cc); ltt_check_deliver(chan, buf, offsets->end - 1, commit_count, endidx); - ltt_write_commit_counter(buf, endidx, + ltt_write_commit_counter(chan, buf, endidx, offsets->end, commit_count, padding_size); } @@ -1518,6 +1521,7 @@ void ltt_force_switch_lockless_slow(struct ust_buffer *buf, offsets.size = 0; + DBG("Switching (forced) %s_%d", chan->channel_name, buf->cpu); /* * Perform retryable operations. */ @@ -1735,6 +1739,7 @@ int ltt_reserve_slot_lockless_slow(struct ust_trace *trace, if (unlikely(offsets.end_switch_old)) { //ust// ltt_clear_noref_flag(chan, buf, SUBBUF_INDEX(offsets.old - 1, chan)); ltt_reserve_switch_old_subbuf(chan, buf, &offsets, tsc); + DBG("Switching %s_%d", chan->channel_name, cpu); } /*