Lines Matching defs:data_ring

313 #define DATA_SIZE(data_ring)		_DATA_SIZE((data_ring)->size_bits)
314 #define DATA_SIZE_MASK(data_ring) (DATA_SIZE(data_ring) - 1)
320 #define DATA_INDEX(data_ring, lpos) ((lpos) & DATA_SIZE_MASK(data_ring))
326 #define DATA_WRAPS(data_ring, lpos) ((lpos) >> (data_ring)->size_bits)
334 #define DATA_THIS_WRAP_START_LPOS(data_ring, lpos) \
335 ((lpos) & ~DATA_SIZE_MASK(data_ring))
374 static struct prb_data_block *to_block(struct prb_data_ring *data_ring,
377 return (void *)&data_ring->data[DATA_INDEX(data_ring, begin_lpos)];
400 static bool data_check_size(struct prb_data_ring *data_ring, unsigned int size)
411 return to_blk_size(size) <= DATA_SIZE(data_ring) / 2;
571 struct prb_data_ring *data_ring = &rb->text_data_ring;
580 while ((lpos_end - lpos_begin) - 1 < DATA_SIZE(data_ring)) {
581 blk = to_block(data_ring, lpos_begin);
635 struct prb_data_ring *data_ring = &rb->text_data_ring;
662 tail_lpos = atomic_long_read(&data_ring->tail_lpos); /* LMM(data_push_tail:A) */
671 while ((lpos - tail_lpos) - 1 < DATA_SIZE(data_ring)) {
734 tail_lpos_new = atomic_long_read(&data_ring->tail_lpos
751 if (atomic_long_try_cmpxchg(&data_ring->tail_lpos, &tail_lpos,
1003 static unsigned long get_next_lpos(struct prb_data_ring *data_ring,
1013 if (DATA_WRAPS(data_ring, begin_lpos) == DATA_WRAPS(data_ring, next_lpos))
1017 return (DATA_THIS_WRAP_START_LPOS(data_ring, next_lpos) + size);
1028 struct prb_data_ring *data_ring = &rb->text_data_ring;
1046 begin_lpos = atomic_long_read(&data_ring->head_lpos);
1049 next_lpos = get_next_lpos(data_ring, begin_lpos, size);
1060 if (WARN_ON_ONCE(next_lpos - begin_lpos > DATA_SIZE(data_ring)) ||
1061 !data_push_tail(rb, next_lpos - DATA_SIZE(data_ring))) {
1084 } while (!atomic_long_try_cmpxchg(&data_ring->head_lpos, &begin_lpos,
1087 blk = to_block(data_ring, begin_lpos);
1090 if (DATA_WRAPS(data_ring, begin_lpos) != DATA_WRAPS(data_ring, next_lpos)) {
1092 blk = to_block(data_ring, 0);
1122 struct prb_data_ring *data_ring = &rb->text_data_ring;
1129 head_lpos = atomic_long_read(&data_ring->head_lpos);
1134 wrapped = (DATA_WRAPS(data_ring, blk_lpos->begin) != DATA_WRAPS(data_ring, blk_lpos->next));
1138 next_lpos = get_next_lpos(data_ring, blk_lpos->begin, size);
1141 if (head_lpos - next_lpos < DATA_SIZE(data_ring)) {
1143 blk = to_block(data_ring, 0);
1145 blk = to_block(data_ring, blk_lpos->begin);
1157 if (WARN_ON_ONCE(next_lpos - blk_lpos->begin > DATA_SIZE(data_ring)) ||
1158 !data_push_tail(rb, next_lpos - DATA_SIZE(data_ring))) {
1163 if (!atomic_long_try_cmpxchg(&data_ring->head_lpos, &head_lpos,
1168 blk = to_block(data_ring, blk_lpos->begin);
1170 if (DATA_WRAPS(data_ring, blk_lpos->begin) != DATA_WRAPS(data_ring, next_lpos)) {
1174 blk = to_block(data_ring, 0);
1199 static unsigned int space_used(struct prb_data_ring *data_ring,
1206 if (DATA_WRAPS(data_ring, blk_lpos->begin) == DATA_WRAPS(data_ring, blk_lpos->next)) {
1208 return (DATA_INDEX(data_ring, blk_lpos->next) -
1209 DATA_INDEX(data_ring, blk_lpos->begin));
1216 return (DATA_INDEX(data_ring, blk_lpos->next) +
1217 DATA_SIZE(data_ring) - DATA_INDEX(data_ring, blk_lpos->begin));
1229 static const char *get_data(struct prb_data_ring *data_ring,
1253 if (DATA_WRAPS(data_ring, blk_lpos->begin) == DATA_WRAPS(data_ring, blk_lpos->next) &&
1255 db = to_block(data_ring, blk_lpos->begin);
1259 } else if (DATA_WRAPS(data_ring, blk_lpos->begin + DATA_SIZE(data_ring)) ==
1260 DATA_WRAPS(data_ring, blk_lpos->next)) {
1261 db = to_block(data_ring, 0);
1262 *data_size = DATA_INDEX(data_ring, blk_lpos->next);
1834 static bool copy_data(struct prb_data_ring *data_ring,
1845 data = get_data(data_ring, blk_lpos, &data_size);