//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;
/*
struct ltt_channel_buf_struct {
/* First 32 bytes cache-hot cacheline */
local_t offset; /* Current offset in the buffer */
- local_t *commit_count; /* Commit count per sub-buffer */
+//ust// local_t *commit_count; /* Commit count per sub-buffer */
atomic_long_t consumed; /*
* Current offset in the buffer
* standard atomic access (shared)
*/
local_t events_lost;
local_t corrupted_subbuffers;
- spinlock_t full_lock; /*
- * buffer full condition spinlock, only
- * for userspace tracing blocking mode
- * synchronization with reader.
- */
+//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// */
- atomic_t wakeup_readers; /* Boolean : wakeup readers waiting ? */
+//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);