return lib_ring_buffer_clock_read(chan);
}
+static
size_t client_record_header_size(const struct lib_ring_buffer_config *config,
struct channel *chan, size_t offset,
size_t data_size,
.wakeup = RING_BUFFER_WAKEUP_BY_TIMER,
};
+static
struct channel *ltt_channel_create(const char *name, struct ltt_trace *trace,
void *buf_addr,
size_t subbuf_size, size_t num_subbuf,
return NULL;
}
+static
void ltt_channel_destroy(struct channel *chan)
{
struct chan_priv *chan_priv = channel_get_private(chan);
kfree(chan_priv);
}
+static
+struct lib_ring_buffer *ltt_buffer_read_open(struct channel *chan)
+{
+ struct lib_ring_buffer *buf;
+ int cpu;
+
+ for_each_channel_cpu(cpu, chan->chan) {
+ buf = channel_get_ring_buffer(&config_config, chan, cpu);
+ if (!lib_ring_buffer_open_read(buf))
+ return buf;
+ }
+ return NULL;
+}
+
+static
+struct lib_ring_buffer *ltt_buffer_read_close(struct lib_ring_buffer *buf)
+{
+ lib_ring_buffer_release_read(buf);
+}
+
static void ltt_relay_remove_dirs(struct ltt_trace *trace)
{
debugfs_remove(trace->dentry.trace_root);
}
return 0;
}
+
static struct ltt_transport ltt_relay_transport = {
.name = "relay-" RING_BUFFER_MODE_TEMPLATE_STRING,
.owner = THIS_MODULE,
.ops = {
.create_dirs = ltt_relay_create_dirs,
.remove_dirs = ltt_relay_remove_dirs,
+ .create_channel = ltt_channel_create,
+ .destroy_channel = ltt_channel_destroy,
+ .buffer_read_open = ltt_buffer_read_open,
+ .buffer_read_close = ltt_buffer_read_close,
},
};