static DEFINE_MUTEX(relay_channels_mutex);
static LIST_HEAD(relay_channels);
+
+static struct dentry *ltt_create_buf_file_callback(struct rchan_buf *buf);
+
/**
* relay_alloc_buf - allocate a channel buffer
* @buf: the buffer struct
/* Create file in fs */
//ust// dentry = chan->cb->create_buf_file(tmpname, chan->parent, S_IRUSR,
//ust// buf);
+
+ ltt_create_buf_file_callback(buf); // ust //
+
//ust// if (!dentry)
//ust// goto free_buf;
//ust//
//ust// buf->hpage[odd] = page = buf->wpage;
//ust// page = ltt_relay_cache_page(buf, &buf->hpage[odd], page, offset);
//ust// return page_address(page->page) + (offset & ~PAGE_MASK);
+ return ((char *)buf->buf_data)+offset;
return NULL;
}
//ust// EXPORT_SYMBOL_GPL(ltt_relay_offset_address);
header->lost_size = SUBBUF_OFFSET((buf->chan->subbuf_size - offset),
buf->chan);
header->cycle_count_end = tsc;
- header->events_lost = ltt_buf->events_lost;
- header->subbuf_corrupt = ltt_buf->corrupted_subbuffers;
+ header->events_lost = local_read(<t_buf->events_lost);
+ header->subbuf_corrupt = local_read(<t_buf->corrupted_subbuffers);
+
}
static notrace void ltt_deliver(struct rchan_buf *buf, unsigned int subbuf_idx,
atomic_set(<t_buf->wakeup_readers, 1);
}
-static struct dentry *ltt_create_buf_file_callback(const char *filename,
- struct dentry *parent, int mode,
- struct rchan_buf *buf)
+static struct dentry *ltt_create_buf_file_callback(struct rchan_buf *buf)
{
struct ltt_channel_struct *ltt_chan;
int err;
//ust// if (!dentry)
//ust// goto error;
//ust// return dentry;
+ return NULL; //ust//
//ust//error:
ltt_relay_destroy_buffer(ltt_chan);
return NULL;
unsigned int j;
ltt_buf->commit_count =
- malloc(sizeof(ltt_buf->commit_count) * n_subbufs);
+ zmalloc(sizeof(ltt_buf->commit_count) * n_subbufs);
if (!ltt_buf->commit_count)
return -ENOMEM;
kref_get(&trace->kref);
kref_get(&trace->ltt_transport_kref);
kref_get(<t_chan->kref);
- ltt_buf->offset = ltt_subbuffer_header_size();
+ local_set(<t_buf->offset, ltt_subbuffer_header_size());
atomic_long_set(<t_buf->consumed, 0);
atomic_long_set(<t_buf->active_readers, 0);
for (j = 0; j < n_subbufs; j++)
ltt_buffer_begin_callback(buf, trace->start_tsc, 0);
- ltt_buf->commit_count[0] += ltt_subbuffer_header_size();
+ local_add(ltt_subbuffer_header_size(), <t_buf->commit_count[0]);
- ltt_buf->events_lost = 0;
- ltt_buf->corrupted_subbuffers = 0;
+ local_set(<t_buf->events_lost, 0);
+ local_set(<t_buf->corrupted_subbuffers, 0);
return 0;
}
static notrace int ltt_relay_reserve_slot(struct ltt_trace_struct *trace,
struct ltt_channel_struct *ltt_channel, void **transport_data,
size_t data_size, size_t *slot_size, long *buf_offset, u64 *tsc,
- unsigned int *rflags, int largest_align, int cpu)
+ unsigned int *rflags, int largest_align)
{
struct rchan *rchan = ltt_channel->trans_channel_data;
struct rchan_buf *buf = *transport_data = rchan->buf;
static void ltt_relay_print_user_errors(struct ltt_trace_struct *trace,
unsigned int chan_index, size_t data_size,
- struct user_dbg_data *dbg, int cpu)
+ struct user_dbg_data *dbg)
{
struct rchan *rchan;
struct ltt_channel_buf_struct *ltt_buf;
void **transport_data, size_t data_size,
size_t *slot_size, long *buf_offset, u64 *tsc,
unsigned int *rflags,
- int largest_align,
- int cpu);
+ int largest_align);
void (*commit_slot) (struct ltt_channel_struct *channel,
void **transport_data, long buf_offset,
size_t slot_size);
void (*remove_channel) (struct ltt_channel_struct *channel);
void (*user_errors) (struct ltt_trace_struct *trace,
unsigned int index, size_t data_size,
- struct user_dbg_data *dbg, int cpu);
+ struct user_dbg_data *dbg);
//ust// #ifdef CONFIG_HOTPLUG_CPU
//ust// int (*handle_cpuhp) (struct notifier_block *nb,
//ust// unsigned long action, void *hcpu,
long *buf_offset,
u64 *tsc,
unsigned int *rflags,
- int largest_align,
- int cpu)
+ int largest_align)
{
return trace->ops->reserve_slot(trace, channel, transport_data,
data_size, slot_size, buf_offset, tsc, rflags,
- largest_align, cpu);
+ largest_align);
}
return old;
}
-#define local_cmpxchg cmpxchg
+//#define local_cmpxchg cmpxchg
+#define local_cmpxchg(l, o, n) (cmpxchg(&((l)->a.counter), (o), (n)))
+
#define atomic_long_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), (old), (new)))
/* LOCAL OPS */
-typedef int local_t;
+//typedef int local_t;
+typedef struct
+{
+ atomic_long_t a;
+} local_t;
+
-static inline void local_inc(local_t *a)
+static inline void local_inc(local_t *l)
{
- (*a)++;
+ (l->a.counter)++;
}
-static inline void local_set(local_t *a, int v)
+static inline void local_set(local_t *l, int v)
{
- *a = v;
+ l->a.counter = v;
}
-static inline void local_add(int v, local_t *a)
+static inline void local_add(int v, local_t *l)
{
- *a += v;
+ l->a.counter += v;
}
-static int local_add_return(int v, local_t *a)
+static int local_add_return(int v, local_t *l)
{
- return *a += v;
+ return l->a.counter += v;
}
-static inline int local_read(local_t *a)
+static inline int local_read(local_t *l)
{
- return *a;
+ return l->a.counter;
}