//ust// #include <linux/kref.h>
//ust// #include <linux/mm.h>
//ust// #include <linux/ltt-core.h>
-#include "kref.h"
-#include "list.h"
+#include <assert.h>
+#include <kcompat/kref.h>
+//#include "list.h"
+#include "channels.h"
+#include "buffer.h"
/* Needs a _much_ better name... */
#define FIX_SIZE(x) ((((x) - 1) & PAGE_MASK) + PAGE_SIZE)
//ust// _ltt_relay_write(buf, offset, src, len, page, pagecpy);
//ust// return len;
-
size_t cpy;
- cpy = min_t(size_t, len, buf->buf_size - offset);
- ltt_relay_do_copy(buf->buf_data + offset, src, cpy);
+ size_t buf_offset = BUFFER_OFFSET(offset, buf->chan);
+
+ assert(buf_offset < buf->chan->subbuf_size*buf->chan->n_subbufs);
+
+ cpy = min_t(size_t, len, buf->buf_size - buf_offset);
+ ltt_relay_do_copy(buf->buf_data + buf_offset, src, cpy);
if (unlikely(len != cpy))
- _ltt_relay_write(buf, offset, src, len, cpy);
+ _ltt_relay_write(buf, buf_offset, src, len, cpy);
return len;
}
struct ltt_channel_buf_struct {
/* First 32 bytes cache-hot cacheline */
local_t offset; /* Current offset in the buffer */
-//ust// local_t *commit_count; /* Commit count per sub-buffer */
+ local_t *commit_count; /* Commit count per sub-buffer */
atomic_long_t consumed; /*
* Current offset in the buffer
* standard atomic access (shared)
* Last timestamp written in the buffer.
*/
/* End of first 32 bytes cacheline */
+//ust// #ifdef CONFIG_LTT_VMCORE
+//ust// local_t *commit_seq; /* Consecutive commits */
+//ust// #endif
atomic_long_t active_readers; /*
* Active readers count
* standard atomic access (shared)
int data_ready_fd_read;
/* commit count per subbuffer; must be at end of struct */
- local_t commit_count[0] ____cacheline_aligned;
+ local_t commit_seq[0] ____cacheline_aligned;
} ____cacheline_aligned;
int ltt_do_get_subbuf(struct rchan_buf *buf, struct ltt_channel_buf_struct *ltt_buf, long *pconsumed_old);
int ltt_do_put_subbuf(struct rchan_buf *buf, struct ltt_channel_buf_struct *ltt_buf, u32 uconsumed_old);
-
#endif /* _LINUX_LTT_RELAY_H */
-