Lines Matching refs:ring

37  * Concurrent ring buffer.
57 ck_ring_size(const struct ck_ring *ring)
61 c = ck_pr_load_uint(&ring->c_head);
62 p = ck_pr_load_uint(&ring->p_tail);
63 return (p - c) & ring->mask;
67 ck_ring_capacity(const struct ck_ring *ring)
69 return ring->size;
73 ck_ring_init(struct ck_ring *ring, unsigned int size)
76 ring->size = size;
77 ring->mask = size - 1;
78 ring->p_tail = 0;
79 ring->p_head = 0;
80 ring->c_head = 0;
88 _ck_ring_enqueue_sp(struct ck_ring *ring,
94 const unsigned int mask = ring->mask;
97 consumer = ck_pr_load_uint(&ring->c_head);
98 producer = ring->p_tail;
114 ck_pr_store_uint(&ring->p_tail, delta);
119 _ck_ring_enqueue_sp_size(struct ck_ring *ring,
128 r = _ck_ring_enqueue_sp(ring, buffer, entry, ts, &sz);
134 _ck_ring_dequeue_sc(struct ck_ring *ring,
139 const unsigned int mask = ring->mask;
142 consumer = ring->c_head;
143 producer = ck_pr_load_uint(&ring->p_tail);
162 ck_pr_store_uint(&ring->c_head, consumer + 1);
167 _ck_ring_enqueue_mp(struct ck_ring *ring,
173 const unsigned int mask = ring->mask;
177 producer = ck_pr_load_uint(&ring->p_head);
185 consumer = ck_pr_load_uint(&ring->c_head);
194 if (ck_pr_cas_uint_value(&ring->p_head,
208 new_producer = ck_pr_load_uint(&ring->p_head);
233 * their data into the ring buffer.
235 while (ck_pr_load_uint(&ring->p_tail) != producer)
243 ck_pr_store_uint(&ring->p_tail, delta);
253 _ck_ring_enqueue_mp_size(struct ck_ring *ring,
262 r = _ck_ring_enqueue_mp(ring, buffer, entry, ts, &sz);
268 _ck_ring_trydequeue_mc(struct ck_ring *ring,
273 const unsigned int mask = ring->mask;
276 consumer = ck_pr_load_uint(&ring->c_head);
278 producer = ck_pr_load_uint(&ring->p_tail);
289 return ck_pr_cas_uint(&ring->c_head, consumer, consumer + 1);
293 _ck_ring_dequeue_mc(struct ck_ring *ring,
298 const unsigned int mask = ring->mask;
301 consumer = ck_pr_load_uint(&ring->c_head);
311 producer = ck_pr_load_uint(&ring->p_tail);
323 } while (ck_pr_cas_uint_value(&ring->c_head,
333 * ring buffer containing pointers. Correctness is only provided if there is up
337 ck_ring_enqueue_spsc_size(struct ck_ring *ring,
343 return _ck_ring_enqueue_sp_size(ring, buffer, &entry,
348 ck_ring_enqueue_spsc(struct ck_ring *ring,
353 return _ck_ring_enqueue_sp(ring, buffer,
358 ck_ring_dequeue_spsc(struct ck_ring *ring,
363 return _ck_ring_dequeue_sc(ring, buffer,
369 * ring buffer containing pointers. Correctness is provided for any number of
373 ck_ring_enqueue_mpmc(struct ck_ring *ring,
378 return _ck_ring_enqueue_mp(ring, buffer, &entry,
383 ck_ring_enqueue_mpmc_size(struct ck_ring *ring,
389 return _ck_ring_enqueue_mp_size(ring, buffer, &entry,
394 ck_ring_trydequeue_mpmc(struct ck_ring *ring,
399 return _ck_ring_trydequeue_mc(ring,
404 ck_ring_dequeue_mpmc(struct ck_ring *ring,
409 return _ck_ring_dequeue_mc(ring, buffer, (void **)data,
415 * ring buffer containing pointers. Correctness is provided for any number of
419 ck_ring_enqueue_spmc_size(struct ck_ring *ring,
425 return _ck_ring_enqueue_sp_size(ring, buffer, &entry,
430 ck_ring_enqueue_spmc(struct ck_ring *ring,
435 return _ck_ring_enqueue_sp(ring, buffer, &entry,
440 ck_ring_trydequeue_spmc(struct ck_ring *ring,
445 return _ck_ring_trydequeue_mc(ring, buffer, (void **)data, sizeof(void *));
449 ck_ring_dequeue_spmc(struct ck_ring *ring,
454 return _ck_ring_dequeue_mc(ring, buffer, (void **)data, sizeof(void *));
459 * ring buffer containing pointers. Correctness is provided for any number of
463 ck_ring_enqueue_mpsc(struct ck_ring *ring,
468 return _ck_ring_enqueue_mp(ring, buffer, &entry,
473 ck_ring_enqueue_mpsc_size(struct ck_ring *ring,
479 return _ck_ring_enqueue_mp_size(ring, buffer, &entry,
484 ck_ring_dequeue_mpsc(struct ck_ring *ring,
489 return _ck_ring_dequeue_sc(ring, buffer, (void **)data,
495 * values of a particular type in the ring the buffer.