X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Fbuffers.h;h=eb75c8b698db4840f5269071f1219fcdf3d60cb8;hb=08b070db024044d21779c63f721673e06032eff8;hp=9fedc487f1847c65a707981016023c7c4ee9e655;hpb=578e232ab4e234294d03fb7022863b45c801eaa1;p=ust.git diff --git a/libust/buffers.h b/libust/buffers.h index 9fedc48..eb75c8b 100644 --- a/libust/buffers.h +++ b/libust/buffers.h @@ -82,6 +82,11 @@ struct ust_buffer { int data_ready_fd_write; /* the reading end of the pipe */ int data_ready_fd_read; + /* + * List of buffers with an open pipe, used for fork and forced subbuffer + * switch. + */ + struct cds_list_head open_buffers_list; unsigned int finalized; //ust// struct timer_list switch_timer; /* timer for periodical switch */ @@ -89,14 +94,14 @@ struct ust_buffer { struct ust_channel *chan; - struct kref kref; + struct urcu_ref urcu_ref; void *buf_data; size_t buf_size; int shmid; unsigned int cpu; /* commit count per subbuffer; must be at end of struct */ - long commit_seq[0] ____cacheline_aligned; /* ATOMIC */ + long commit_seq[0]; /* ATOMIC */ } ____cacheline_aligned; /* @@ -271,7 +276,7 @@ static __inline__ int ltt_poll_deliver(struct ust_channel *chan, struct ust_buff consumed_idx = SUBBUF_INDEX(consumed_old, buf->chan); commit_count = uatomic_read(&buf->commit_count[consumed_idx].cc_sb); /* - * No memory barrier here, since we are only interested + * No memory cmm_barrier here, since we are only interested * in a statistically correct polling result. The next poll will * get the data is we are racing. The mb() that ensures correct * memory order is in get_subbuf. @@ -370,7 +375,7 @@ static __inline__ int ltt_reserve_slot(struct ust_channel *chan, * Perform retryable operations. */ /* FIXME: make this really per cpu? */ - if (unlikely(LOAD_SHARED(ltt_nesting) > 4)) { + if (unlikely(CMM_LOAD_SHARED(ltt_nesting) > 4)) { DBG("Dropping event because nesting is too deep."); uatomic_inc(&buf->events_lost); return -EPERM; @@ -483,7 +488,7 @@ static __inline__ void ltt_commit_slot( long endidx = SUBBUF_INDEX(offset_end - 1, chan); long commit_count; - smp_wmb(); + cmm_smp_wmb(); uatomic_add(&buf->commit_count[endidx].cc, slot_size); /* @@ -569,7 +574,7 @@ size_t ust_buffers_do_strncpy(void *dest, const void *src, size_t len, * don't have constants, so gcc generally uses a function call. */ for (; len > 0; len--) { - *(u8 *)dest = LOAD_SHARED(*(const u8 *)src); + *(u8 *)dest = CMM_LOAD_SHARED(*(const u8 *)src); /* Check with dest, because src may be modified concurrently */ if (*(const u8 *)dest == '\0') { len--;