mark 32 bit support as broken
[ust.git] / libust / relay.h
index 4b27b5bc8a7a476e5ded96c5ff7c84cbbe4287b0..0e1827912b4870472088ed51f07d32d4e9fe42e6 100644 (file)
 //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)
@@ -210,18 +213,26 @@ static inline struct buf_page *ltt_relay_cache_page(struct rchan_buf *buf,
 }
 
 //ust// #ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
- static inline void ltt_relay_do_copy(void *dest, const void *src, size_t len)
+static inline void ltt_relay_do_copy(void *dest, const void *src, size_t len)
 {
+       union {
+               const void *src;
+               const u8 *src8;
+               const u16 *src16;
+               const u32 *src32;
+               const u64 *src64;
+       } u = { .src = src };
+
        switch (len) {
        case 0: break;
-       case 1: *(u8 *)dest = *(const u8 *)src;
+       case 1: *(u8 *)dest = *u.src8;
                break;
-       case 2: *(u16 *)dest = *(const u16 *)src;
+       case 2: *(u16 *)dest = *u.src16;
                break;
-       case 4: *(u32 *)dest = *(const u32 *)src;
+       case 4: *(u32 *)dest = *u.src32;
                break;
 //ust// #if (BITS_PER_LONG == 64)
-       case 8: *(u64 *)dest = *(const u64 *)src;
+       case 8: *(u64 *)dest = *u.src64;
                break;
 //ust// #endif
        default:
@@ -289,13 +300,16 @@ static inline int ltt_relay_write(struct rchan_buf *buf, size_t offset,
 //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;
 }
 
@@ -303,7 +317,7 @@ static inline int ltt_relay_write(struct rchan_buf *buf, size_t offset,
  * CONFIG_LTT_RELAY kernel API, ltt/ltt-relay-alloc.c
  */
 
-struct rchan *ltt_relay_open(const char *base_filename,
+extern struct rchan *ltt_relay_open(const char *base_filename,
                         struct dentry *parent,
                         size_t subbuf_size,
                         size_t n_subbufs,
@@ -320,7 +334,7 @@ extern const struct file_operations ltt_relay_file_operations;
 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)
@@ -329,6 +343,9 @@ struct ltt_channel_buf_struct {
                                         * 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)
@@ -355,13 +372,18 @@ struct ltt_channel_buf_struct {
        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);
+extern 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);
+extern int ltt_do_put_subbuf(struct rchan_buf *buf, struct ltt_channel_buf_struct *ltt_buf, u32 uconsumed_old);
 
+extern void init_ustrelay_transport(void);
 
-#endif /* _LINUX_LTT_RELAY_H */
+/*static*/ /* inline */ notrace void ltt_commit_slot(
+               struct ltt_channel_struct *ltt_channel,
+               void **transport_data, long buf_offset,
+               size_t data_size, size_t slot_size);
 
+#endif /* _LINUX_LTT_RELAY_H */
This page took 0.024625 seconds and 4 git commands to generate.