in ncrx/nctx.c [172:196]
static void kmsg_ring_consume(struct kmsg_ring *ring, uint64_t upto_seq)
{
uint64_t tail_seq = kmsg_ring_tail_seq(ring);
int tail = ring->tail;
if (!ring->head_seq || upto_seq < tail_seq)
return;
if (upto_seq >= ring->head_seq)
upto_seq = ring->head_seq - 1;
while (tail_seq <= upto_seq) {
struct kmsg_slot *slot = &ring->slots[ring->head];
free(slot->msg);
memset(slot, 0, sizeof(*slot));
tail_seq++;
tail = (tail + 1) % ring->nr_slots;
/* made progress, reset emergency tx */
ring->emg_tx_intv = 0;
}
ring->tail = tail;
}