offset += padding;
if (!(ctx->rflags & (RING_BUFFER_RFLAG_FULL_TSC | LTT_RFLAG_EXTENDED))) {
offset += sizeof(uint32_t); /* id and timestamp */
offset += padding;
if (!(ctx->rflags & (RING_BUFFER_RFLAG_FULL_TSC | LTT_RFLAG_EXTENDED))) {
offset += sizeof(uint32_t); /* id and timestamp */
/* Minimum space taken by 5-bit id */
offset += sizeof(uint8_t);
/* Align extended struct on largest member */
/* Minimum space taken by 5-bit id */
offset += sizeof(uint8_t);
/* Align extended struct on largest member */
offset += padding;
offset += sizeof(uint16_t);
if (!(ctx->rflags & (RING_BUFFER_RFLAG_FULL_TSC | LTT_RFLAG_EXTENDED))) {
offset += padding;
offset += sizeof(uint16_t);
if (!(ctx->rflags & (RING_BUFFER_RFLAG_FULL_TSC | LTT_RFLAG_EXTENDED))) {
uint16_t id = event_id;
lib_ring_buffer_write(config, ctx, &id, sizeof(id));
uint16_t id = event_id;
lib_ring_buffer_write(config, ctx, &id, sizeof(id));
lib_ring_buffer_write(config, ctx, ×tamp, sizeof(timestamp));
break;
}
lib_ring_buffer_write(config, ctx, ×tamp, sizeof(timestamp));
break;
}
bt_bitfield_write(&id, uint8_t, 0, 5, 31);
lib_ring_buffer_write(config, ctx, &id, sizeof(id));
/* Align extended struct on largest member */
bt_bitfield_write(&id, uint8_t, 0, 5, 31);
lib_ring_buffer_write(config, ctx, &id, sizeof(id));
/* Align extended struct on largest member */
lib_ring_buffer_write(config, ctx, &event_id, sizeof(event_id));
lib_ring_buffer_write(config, ctx, &event_id, sizeof(event_id));
lib_ring_buffer_write(config, ctx, ×tamp, sizeof(timestamp));
}
break;
lib_ring_buffer_write(config, ctx, ×tamp, sizeof(timestamp));
}
break;
uint16_t id = event_id;
lib_ring_buffer_write(config, ctx, &id, sizeof(id));
uint16_t id = event_id;
lib_ring_buffer_write(config, ctx, &id, sizeof(id));
lib_ring_buffer_write(config, ctx, ×tamp, sizeof(timestamp));
} else {
uint16_t id = 65535;
lib_ring_buffer_write(config, ctx, ×tamp, sizeof(timestamp));
} else {
uint16_t id = 65535;
lib_ring_buffer_write(config, ctx, &id, sizeof(id));
/* Align extended struct on largest member */
lib_ring_buffer_write(config, ctx, &id, sizeof(id));
/* Align extended struct on largest member */
lib_ring_buffer_write(config, ctx, &event_id, sizeof(event_id));
lib_ring_buffer_write(config, ctx, &event_id, sizeof(event_id));
lib_ring_buffer_write(config, ctx, ×tamp, sizeof(timestamp));
}
break;
lib_ring_buffer_write(config, ctx, ×tamp, sizeof(timestamp));
}
break;
struct packet_header *header =
(struct packet_header *)
lib_ring_buffer_offset_address(&buf->backend,
struct packet_header *header =
(struct packet_header *)
lib_ring_buffer_offset_address(&buf->backend,
struct ltt_channel *ltt_chan = channel_get_private(chan);
struct ltt_session *session = ltt_chan->session;
struct ltt_channel *ltt_chan = channel_get_private(chan);
struct ltt_session *session = ltt_chan->session;
* subbuffer. data_size is between 1 and subbuf_size.
*/
static void client_buffer_end(struct lib_ring_buffer *buf, u64 tsc,
* subbuffer. data_size is between 1 and subbuf_size.
*/
static void client_buffer_end(struct lib_ring_buffer *buf, u64 tsc,
- unsigned int subbuf_idx, unsigned long data_size)
+ unsigned int subbuf_idx, unsigned long data_size,
+ struct shm_handle *handle)
struct packet_header *header =
(struct packet_header *)
lib_ring_buffer_offset_address(&buf->backend,
struct packet_header *header =
(struct packet_header *)
lib_ring_buffer_offset_address(&buf->backend,
-static void client_buffer_finalize(struct lib_ring_buffer *buf, void *priv, int cpu)
+static void client_buffer_finalize(struct lib_ring_buffer *buf, void *priv, int cpu, struct shm_handle *handle)
.mode = RING_BUFFER_MODE_TEMPLATE,
.backend = RING_BUFFER_PAGE,
.mode = RING_BUFFER_MODE_TEMPLATE,
.backend = RING_BUFFER_PAGE,
- .ipi = RING_BUFFER_IPI_BARRIER,
- .wakeup = RING_BUFFER_WAKEUP_BY_TIMER,
+ .ipi = RING_BUFFER_NO_IPI_BARRIER,
+ .wakeup = RING_BUFFER_WAKEUP_BY_WRITER,
struct ltt_channel *ltt_chan, void *buf_addr,
size_t subbuf_size, size_t num_subbuf,
unsigned int switch_timer_interval,
struct ltt_channel *ltt_chan, void *buf_addr,
size_t subbuf_size, size_t num_subbuf,
unsigned int switch_timer_interval,
- return channel_create(&client_config, name, ltt_chan, buf_addr,
+ ltt_chan->handle = channel_create(&client_config, name, ltt_chan, buf_addr,
subbuf_size, num_subbuf, switch_timer_interval,
subbuf_size, num_subbuf, switch_timer_interval,
{
struct lib_ring_buffer *buf;
int cpu;
for_each_channel_cpu(cpu, chan) {
{
struct lib_ring_buffer *buf;
int cpu;
for_each_channel_cpu(cpu, chan) {
- buf = channel_get_ring_buffer(&client_config, chan, cpu);
- if (!lib_ring_buffer_open_read(buf))
+ buf = channel_get_ring_buffer(&client_config, chan, cpu, handle);
+ if (!lib_ring_buffer_open_read(buf, handle))
.ops = {
.channel_create = _channel_create,
.channel_destroy = ltt_channel_destroy,
.ops = {
.channel_create = _channel_create,
.channel_destroy = ltt_channel_destroy,