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);
}
(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);
* 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)
{
//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,
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)
//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 */
&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);
}
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());
}
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);
}
offsets.size = 0;
+ DBG("Switching (forced) %s_%d", chan->channel_name, buf->cpu);
/*
* Perform retryable operations.
*/
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);
}
/*