From: Mathieu Desnoyers Date: Mon, 1 Jul 2013 17:23:11 +0000 (-0400) Subject: Cleanup: lib_ring_buffer_switch_new_end() only calls subbuffer_set_data_size() X-Git-Tag: v2.3.0-rc1~15 X-Git-Url: https://git.lttng.org/?p=lttng-modules.git;a=commitdiff_plain;h=768b05c983a930f772079c0085cd5f36f6573b19 Cleanup: lib_ring_buffer_switch_new_end() only calls subbuffer_set_data_size() lib_ring_buffer_switch_new_end() is always called when an event exactly fills a sub-buffer, which makes padding_size always 0. However, there is one side-effect that lib_ring_buffer_switch_new_end() needs to have: it calls subbuffer_set_data_size() to update the size of the data to be read from the sub-buffer. Signed-off-by: Mathieu Desnoyers --- diff --git a/lib/ringbuffer/ring_buffer_frontend.c b/lib/ringbuffer/ring_buffer_frontend.c index 77f9e8bb..077be3c8 100644 --- a/lib/ringbuffer/ring_buffer_frontend.c +++ b/lib/ringbuffer/ring_buffer_frontend.c @@ -1352,8 +1352,10 @@ void lib_ring_buffer_switch_new_start(struct lib_ring_buffer *buf, /* * lib_ring_buffer_switch_new_end: finish switching current subbuffer * - * The only remaining threads could be the ones with pending commits. They will - * have to do the deliver themselves. + * Calls subbuffer_set_data_size() to set the data size of the current + * sub-buffer. We do not need to perform check_deliver nor commit here, + * since this task will be done by the "commit" of the event for which + * we are currently doing the space reservation. */ static void lib_ring_buffer_switch_new_end(struct lib_ring_buffer *buf, @@ -1362,33 +1364,11 @@ void lib_ring_buffer_switch_new_end(struct lib_ring_buffer *buf, u64 tsc) { const struct lib_ring_buffer_config *config = &chan->backend.config; - unsigned long endidx = subbuf_index(offsets->end - 1, chan); - unsigned long commit_count, padding_size, data_size; + unsigned long endidx, data_size; + endidx = subbuf_index(offsets->end - 1, chan); data_size = subbuf_offset(offsets->end - 1, chan) + 1; - padding_size = chan->backend.subbuf_size - data_size; subbuffer_set_data_size(config, &buf->backend, endidx, data_size); - - /* - * Order all writes to buffer before the commit count update that will - * determine that the subbuffer is full. - */ - if (config->ipi == RING_BUFFER_IPI_BARRIER) { - /* - * Must write slot data before incrementing commit count. This - * compiler barrier is upgraded into a smp_mb() by the IPI sent - * by get_subbuf(). - */ - barrier(); - } else - smp_wmb(); - v_add(config, padding_size, &buf->commit_hot[endidx].cc); - commit_count = v_read(config, &buf->commit_hot[endidx].cc); - lib_ring_buffer_check_deliver(config, buf, chan, offsets->end - 1, - commit_count, endidx); - lib_ring_buffer_write_commit_counter(config, buf, chan, endidx, - offsets->end, commit_count, - padding_size); } /*