STRUCT IDPF_BUF_QUEUE(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– 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_fqe for data buffers.
  • pp β€” page_pool for data buffers.
  • {unnamed_struct} β€” anonymous. yes, another one, we stay anonymous πŸ’€
  • xsk_buf β€” xdp_buff for XSk Rx buffers.
  • pool β€” xsk_buff_pool on XSk queues.
  • hdr_buf β€” libeth_fqe for header buffers.
  • hdr_pp β€” page_pool for header buffers.
  • tail β€” Tail offset.
  • flags β€” See enum 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:


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