ifmp_ring
struct ifmp_ring;
typedef u_int (*mp_ring_drain_t)(struct ifmp_ring *, u_int, u_int);
typedef u_int (*mp_ring_can_drain_t)(struct ifmp_ring *);
typedef void (*mp_ring_serial_t)(struct ifmp_ring *);
int ifmp_ring_alloc(struct ifmp_ring **, int, void *, mp_ring_drain_t,
void ifmp_ring_free(struct ifmp_ring *);
int ifmp_ring_enqueue(struct ifmp_ring *, void **, int, int, int);
void ifmp_ring_check_drainage(struct ifmp_ring *, int);
void ifmp_ring_reset_stats(struct ifmp_ring *);
int ifmp_ring_is_idle(struct ifmp_ring *);
int ifmp_ring_is_stalled(struct ifmp_ring *r);
struct ifmp_ring *ift_br;
_ring_peek_one(struct ifmp_ring *r, int cidx, int offset, int remaining)
iflib_txq_can_drain(struct ifmp_ring *r)
iflib_txq_drain(struct ifmp_ring *r, uint32_t cidx, uint32_t pidx)
iflib_txq_drain_always(struct ifmp_ring *r)
iflib_txq_drain_free(struct ifmp_ring *r, uint32_t cidx, uint32_t pidx)
struct ifmp_ring *r;
static uint32_t iflib_txq_can_drain(struct ifmp_ring *);
drain_ring_lockless(struct ifmp_ring *r, union ring_state os, uint16_t prev, int budget)
ifmp_ring_alloc(struct ifmp_ring **pr, int size, void *cookie, mp_ring_drain_t drain,
struct ifmp_ring *r;
r = malloc(__offsetof(struct ifmp_ring, items[size]), mt, flags | M_ZERO);
ifmp_ring_free(struct ifmp_ring *r)
ifmp_ring_enqueue(struct ifmp_ring *r, void **items, int n, int budget, int abdicate)
ifmp_ring_enqueue(struct ifmp_ring *r, void **items, int n, int budget, int abdicate)
ifmp_ring_check_drainage(struct ifmp_ring *r, int budget)
ifmp_ring_reset_stats(struct ifmp_ring *r)
ifmp_ring_is_idle(struct ifmp_ring *r)
ifmp_ring_is_stalled(struct ifmp_ring *r)
space_available(struct ifmp_ring *r, union ring_state s)
increment_idx(struct ifmp_ring *r, uint16_t idx, uint16_t n)
drain_ring_locked(struct ifmp_ring *r, union ring_state os, uint16_t prev, int budget)