/* *Rollingbuffer.Whilstthebufferisliveandinuse,foliosandfolio *queuesegmentscanbeaddedtooneendbyonethreadandremovedfromthe *otherendbyanotherthread.Thebufferisn'tallowedtobeempty;itmust *alwayshaveatleastonefolio_queueinitsothatneithersidehasto *modifybothqueuepointers. * *Theiteratorinthebufferisextendedasbuffersareinserted.Itcanbe *snapshottedtouseasegmentofthebuffer.
*/ struct rolling_buffer { struct folio_queue *head; /* Producer's insertion point */ struct folio_queue *tail; /* Consumer's removal point */ struct iov_iter iter; /* Iterator tracking what's left in the buffer */
u8 next_head_slot; /* Next slot in ->head */
u8 first_tail_slot; /* First slot in ->tail */
};
/* *Snapshotofarollingbuffer.
*/ struct rolling_buffer_snapshot { struct folio_queue *curr_folioq; /* Queue segment in which current folio resides */ unsignedchar curr_slot; /* Folio currently being read */ unsignedchar curr_order; /* Order of folio */
};
/* Marks to store per-folio in the internal folio_queue structs. */ #define ROLLBUF_MARK_1 BIT(0) #define ROLLBUF_MARK_2 BIT(1)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.