X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=libtracing%2Frelay.h;h=4b27b5bc8a7a476e5ded96c5ff7c84cbbe4287b0;hb=e70acc91ae21023149204a245638c1d2dffa7265;hp=47ebfd13fd9e99cc870bd0fa7302dedc92d12f5d;hpb=bb07823d7dc174f7bd96d30843acfac7424dd0d2;p=ust.git diff --git a/libtracing/relay.h b/libtracing/relay.h index 47ebfd1..4b27b5b 100644 --- a/libtracing/relay.h +++ b/libtracing/relay.h @@ -59,6 +59,7 @@ struct rchan_buf { //ust// unsigned int page_count; /* number of current buffer pages */ unsigned int finalized; /* buffer has been finalized */ //ust// unsigned int cpu; /* this buf's cpu */ + int shmid; /* the shmid of the buffer data pages */ } ____cacheline_aligned; /* @@ -143,7 +144,7 @@ struct rchan_callbacks { * * The callback should return 0 if successful, negative if not. */ - int (*remove_buf_file)(struct rchan_buf *buf); +//ust// int (*remove_buf_file)(struct rchan_buf *buf); }; extern struct buf_page *ltt_relay_find_prev_page(struct rchan_buf *buf, @@ -314,5 +315,53 @@ extern void ltt_relay_close(struct rchan *chan); */ extern const struct file_operations ltt_relay_file_operations; + +/* LTTng lockless logging buffer info */ +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 */ + atomic_long_t consumed; /* + * Current offset in the buffer + * standard atomic access (shared) + */ + unsigned long last_tsc; /* + * Last timestamp written in the buffer. + */ + /* End of first 32 bytes cacheline */ + atomic_long_t active_readers; /* + * Active readers count + * standard atomic access (shared) + */ + local_t events_lost; + local_t corrupted_subbuffers; +//ust// spinlock_t full_lock; /* +//ust// * buffer full condition spinlock, only +//ust// * for userspace tracing blocking mode +//ust// * synchronization with reader. +//ust// */ +//ust// wait_queue_head_t write_wait; /* +//ust// * Wait queue for blocking user space +//ust// * writers +//ust// */ +//ust// atomic_t wakeup_readers; /* Boolean : wakeup readers waiting ? */ + /* one byte is written to this pipe when data is available, in order + to wake the consumer */ + /* portability: Single byte writes must be as quick as possible. The kernel-side + buffer must be large enough so the writer doesn't block. From the pipe(7) + man page: Since linux 2.6.11, the pipe capacity is 65536 bytes. */ + int data_ready_fd_write; + /* the reading end of the pipe */ + int data_ready_fd_read; + + /* commit count per subbuffer; must be at end of struct */ + local_t commit_count[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 */