STRUCT IDPF_BUF_QUEUE(9)
π struct idpf_buf_queue π
okay so bestie, welcome to the Kernel API Manual, section 9 β this is the struct idpf_buf_queue(9) page, and it's literally the software structure representing a buffer queue. no cap, that's the whole NAME vibe. π«Ά
πΈ NAME πΈ
struct idpf_buf_queue β the software structure representing a buffer queue, bestie. iconic behavior honestly π
β¨ SYNOPSIS β¨
here's the struct in all its glory β copied exactly, don't come for me:
struct idpf_buf_queue {
__cacheline_group_begin_aligned(read_mostly);
struct virtchnl2_splitq_rx_buf_desc *split_buf;
union {
struct {
struct libeth_fqe *buf;
struct page_pool *pp;
};
struct {
struct libeth_xdp_buff **xsk_buf;
struct xsk_buff_pool *pool;
};
};
struct libeth_fqe *hdr_buf;
struct page_pool *hdr_pp;
void __iomem *tail;
unsigned long flags[BITS_TO_LONGS( __IDPF_Q_FLAGS_NBITS)];
u32 desc_count;
u32 thresh;
__cacheline_group_end_aligned(read_mostly);
__cacheline_group_begin_aligned(read_write);
u32 next_to_use;
u32 next_to_clean;
u32 next_to_alloc;
u32 pending;
u32 hdr_truesize;
u32 truesize;
__cacheline_group_end_aligned(read_write);
__cacheline_group_begin_aligned(cold);
u32 q_id;
u32 size;
dma_addr_t dma;
struct idpf_q_vector *q_vector;
u16 rx_buffer_low_watermark;
u16 rx_hbuf_size;
u16 rx_buf_size;
__cacheline_group_end_aligned(cold);
};
you can clock the cacheline groups in there β read_mostly, read_write, and cold β the magic is all in the block, don't skip it π
π MEMBERS π
okay now the member-by-member breakdown, because we're thorough and we ate:
split_bufβ buffer descriptor array. yes bestie, the descriptor array itself π{unnamed_union}β anonymous. it's giving mysterious, iykyk.{unnamed_struct}β anonymous.bufβlibeth_fqefor data buffers.ppβpage_poolfor data buffers.{unnamed_struct}β anonymous. yes, another one, we stay anonymous πxsk_bufβxdp_bufffor XSk Rx buffers.poolβxsk_buff_poolon XSk queues.hdr_bufβlibeth_fqefor header buffers.hdr_ppβpage_poolfor header buffers.tailβ Tail offset.flagsβ Seeenum idpf_queue_flags_t.desc_countβ Number of descriptors.threshβ refill threshold in XSk.next_to_useβ Next descriptor to use.next_to_cleanβ Next descriptor to clean.next_to_allocβ RX buffer to allocate at.pendingβ number of buffers to refill (Xsk).hdr_truesizeβ truesize for buffer headers.truesizeβ truesize for data buffers.q_idβ Queue id.sizeβ Length of descriptor ring in bytes.dmaβ Physical address of ring.q_vectorβ Backreference to associated vector.rx_buffer_low_watermarkβ RX buffer low watermark.rx_hbuf_sizeβ Header buffer size.rx_buf_sizeβ Buffer size.
π₯ SEE ALSO π₯
Kernel file: ./drivers/net/ethernet/intel/idpf/idpf_txrx.h
the whole bestie squad of references, all present and accounted for:
struct idpf_tx_offload_params(9)struct idpf_tx_splitq_params(9)enum idpf_queue_flags_t(9)struct idpf_vec_regs(9)struct idpf_intr_reg(9)struct idpf_q_vector(9)struct idpf_rx_queue(9)struct idpf_tx_queue(9)struct idpf_compl_queue(9)struct idpf_sw_queue(9)struct idpf_rxq_set(9)struct idpf_bufq_set(9)struct idpf_rxq_group(9)struct idpf_txq_group(9)idpf_size_to_txd_count(9)idpf_tx_singleq_build_ctob(9)idpf_tx_splitq_build_desc(9)idpf_vport_intr_set_wb_on_itr(9)idpf_tx_splitq_get_free_bufs(9)
okay that's the whole vibe, bestie π this page comes from the kernel source tree at ./drivers/net/ethernet/intel/idpf, dated October 2026, and it's the manual page for struct idpf_buf_queue(9). slay β¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms