STRUCT LIBIE_CTLQ_INFO(9)
π 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 insidelibie_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
- 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