STRUCT IDPF_RX_QUEUE(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 NAME 🌸

struct idpf_rx_queue β€” software structure representing a receive queue.

hii bestie πŸ’– this is the struct idpf_rx_queue(9) page from the Kernel API Manual, and it's literally the software structure representing a receive queue. no cap. we're gonna go through every single member together, including the anonymous unions, because we do not skip lore in this group chat πŸ’…


✨ SYNOPSIS ✨

       struct idpf_rx_queue {
           __cacheline_group_begin_aligned(read_mostly);
           union {
             union virtchnl2_rx_desc *rx;
             struct virtchnl2_singleq_rx_buf_desc *single_buf;
             void *desc_ring;
           };
           union {
             struct {
               struct idpf_bufq_set *bufq_sets;
               struct napi_struct *napi;
               struct bpf_prog *xdp_prog;
             };
             struct {
               struct libeth_fqe *rx_buf;
               struct page_pool *pp;
               void __iomem *tail;
             };
           };
           unsigned long flags[BITS_TO_LONGS( __IDPF_Q_FLAGS_NBITS)];
           u16 idx;
           u16 desc_count;
           u32 num_xdp_txq;
           union {
             struct idpf_tx_queue **xdpsqs;
             struct {
               u32 rxdids;
               u32 truesize;
             };
           };
           const struct libeth_rx_pt *rx_ptype_lkup;
           struct xdp_rxq_info xdp_rxq;
           __cacheline_group_end_aligned(read_mostly);
           __cacheline_group_begin_aligned(read_write);
           u32 next_to_use;
           u32 next_to_clean;
           u32 next_to_alloc;
           union {
             struct libeth_xdp_buff_stash xdp;
             struct {
               struct libeth_xdp_buff *xsk;
               struct xsk_buff_pool *pool;
             };
           };
           u64 cached_phc_time;
           struct u64_stats_sync stats_sync;
           struct idpf_rx_queue_stats q_stats;
           __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;
           u16 rx_max_pkt_size;
           __cacheline_group_end_aligned(cold);
        };

πŸ’– Members πŸ’–

okay bestie, here's every member, including the anonymous ones β€” we are not skipping a single one:

  • {unnamed_union} β€” anonymous
    • rx β€” universal receive descriptor array
    • single_buf β€” buffer descriptor array in singleq
    • desc_ring β€” virtual descriptor ring address
  • {unnamed_union} β€” anonymous
    • {unnamed_struct} β€” anonymous
      • bufq_sets β€” Pointer to the array of buffer queues in splitq mode
      • napi β€” NAPI instance corresponding to this queue (splitq)
      • xdp_prog β€” attached XDP program
    • {unnamed_struct} β€” anonymous
      • rx_buf β€” See struct libeth_fqe
      • pp β€” Page pool pointer in singleq mode
      • tail β€” Tail offset. Used for both queue models single and split.
  • flags β€” See enum idpf_queue_flags_t
  • idx β€” For RX queue, it is used to index to total RX queue across groups and used for skb reporting.
  • desc_count β€” Number of descriptors
  • num_xdp_txq β€” total number of XDP Tx queues
  • {unnamed_union} β€” anonymous
    • xdpsqs β€” shortcut for XDP Tx queues array
    • {unnamed_struct} β€” anonymous
      • rxdids β€” Supported RX descriptor ids
      • truesize β€” data buffer truesize in singleq
  • rx_ptype_lkup β€” LUT of Rx ptypes
  • xdp_rxq β€” XDP queue info
  • next_to_use β€” Next descriptor to use
  • next_to_clean β€” Next descriptor to clean
  • next_to_alloc β€” RX buffer to allocate at
  • {unnamed_union} β€” anonymous
    • xdp β€” XDP buffer with the current frame
    • {unnamed_struct} β€” anonymous
      • xsk β€” current XDP buffer in XSk mode
      • pool β€” XSk pool if installed
  • cached_phc_time β€” Cached PHC time for the Rx queue
  • stats_sync β€” See struct u64_stats_sync
  • q_stats β€” See union idpf_rx_queue_stats
  • 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
  • rx_max_pkt_size β€” RX max packet size

and that's the whole struct, periodt πŸ’…βœ¨


πŸ¦‹ SEE ALSO πŸ¦‹

Kernel file ./drivers/net/ethernet/intel/idpf/idpf_txrx.h plus the whole squad: 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_tx_queue(9), struct idpf_buf_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).


mwah πŸ’‹ β€” source/version vibes: ./drivers/net/ethernet/intel/idpf, dated October 2026, and this page is struct idpf_rx_queue(9). bye bestie, go slay those receive queues 🫢✨

πŸ“¦ where this page comes from