STRUCT LIBIE_CTLQ_INFO(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– struct libie_ctlq_info(9) πŸ’–

okay bestie, welcome to the Kernel API Manual, section 9 β€” we're doing kernel API today and honestly? it's giving main character energy. this one's all about struct libie_ctlq_info β€” literally the control queue information struct. no cap, that's the whole NAME. πŸŽ€


✨ SYNOPSIS ✨

like, here's the whole vibe, character for character:

struct libie_ctlq_info {
    struct list_head                list;
    enum libie_ctlq_type            type;
    int qid;
    spinlock_t lock;
    struct libie_cp_dma_mem ring_mem;
    struct libie_ctlq_desc          *descs;
    union {
      struct libeth_fqe       *rx_fqes;
      struct libie_ctlq_msg   **tx_msg;
    };
    struct libie_ctlq_reg           reg;
    struct device                   *dev;
    struct page_pool                *pp;
    u32 truesize;
    u32 next_to_clean;
    union {
      u32 next_to_use;
      u32 next_to_post;
    };
    u32 ring_len;
 };

she's a struct with two unnamed unions in her. iconic behavior tbh. πŸ¦‹


🌸 Members 🌸

okay so every single field, and what it's actually doing. no skipping, we're thorough here:

  • list β€” this is how a controlq gets added to the list of queues inside libie_ctlq_ctx. it's the group chat invite, basically. ✨
  • type β€” the control queue's type. which flavor of controlq are we dealing with, iykyk.
  • qid β€” the queue identifier. her little name tag. πŸ’…
  • lock β€” the control queue lock. mutual exclusion, periodt.
  • ring_mem β€” descriptor ring DMA memory. the memory, but make it DMA.
  • descs β€” array of descriptors. a whole lineup of them.
  • {unnamed_union} β€” anonymous. that's it, that's the whole description. mysterious. lowkey love that for her. πŸ™ˆ
    • rx_fqes β€” array of controlq Rx buffers.
    • tx_msg β€” Tx messages sent to hardware.
  • reg β€” registers used by the control queue.
  • dev β€” the device that owns this control queue. her owner, her home. 🫢
  • pp β€” page pool for controlq Rx buffers.
  • truesize β€” the size to allocate per buffer.
  • next_to_clean β€” next descriptor to be cleaned. (yes, she tracks this. organized queen.) πŸ‘‘
  • {unnamed_union} β€” anonymous again. two unnamed unions in one struct, we stan a private girlie. 🧚
    • next_to_use β€” next available slot to send buffer (Tx queue).
    • next_to_post β€” next available slot to post buffers to (Rx queue).
  • ring_len β€” length of the descriptor ring. like how long the ring is. πŸ’€
ngl the two {unnamed_union} / anonymous entries are literally how the original lists them β€” the fields inside are the real content, the union itself is just vibing unnamed. don't come for me, that's the source. πŸ’–

⭐ SEE ALSO ⭐

go read these next, bestie, they're all in the same friend group:

Kernel file ./include/linux/net/intel/libie/controlq.h enum libie_ctlq_type(9), struct libie_ctlq_ctx(9), struct libie_ctlq_reg(9), struct libie_cp_dma_mem(9), struct libie_ctlq_msg(9), struct libie_ctlq_create_info(9), struct libie_ctlq_desc(9), struct libie_ctlq_clean_params(9), libie_ctlq_release_rx_buf(9), enum libie_ctlq_xn_state(9), struct libie_ctlq_xn(9), struct libie_ctlq_xn_manager(9), struct libie_ctlq_xn_send_params(9), libie_cp_can_send_onstack(9), struct libie_ctlq_xn_recv_params(9), struct libie_ctlq_xn_init_params(9)


and that's the page!! πŸŽ€ mwah πŸ’‹ this one came from ./include/linux/net/intel/libie and it's dated October 2026 β€” so yeah, she's from the future, slay. ✨🌈🫢

πŸ“¦ where this page comes from