libeth_xdpsq_num(9)
π libeth_xdpsq_num(9) β aka the "how many XDPSQs do we even need" girlie β¨
okay so bestie, welcome to the Kernel API Manual section 9 π this one's a tiny little function but she's important, so let's get into it π«Ά
β¨ NAME β¨
libeth_xdpsq_num β she calculates the optimal number of XDPSQs for this device + sys π₯ no cap, that's the whole job.
πΈ SYNOPSIS πΈ
u32 libeth_xdpsq_num (u32 rxq , u32 txq , u32 max );
three little u32s go in, one u32 comes out, it's giving vending machine but make it kernel π
π¦ ARGUMENTS π¦
rxqβ the current number of active Rx queues, iykyk π₯txqβ the current number of active Tx queues, periodt π€maxβ the maximum number of Tx queues, the literal ceiling bestie π
π DESCRIPTION π
okay so here's the tea βοΈ
Every RQ must have its own XDPSQ for XSk pairs β like, not optional, they're literally paired, main character energy π
And every CPU must have its own XDPSQ for lockless sending (that's `XDP_TX`, and .ndo_xdp_xmit for the girlies taking notes βοΈ).
Then you cap the maximum of these two with the number of SQs the device can have β minus the ones already used π like, sorry babe, the hardware has limits, that's just the vibe check.
β RETURN β
she returns the number of XDP Tx queues the device needs to use β that's it, that's the answer, slay π π
π SEE ALSO π
the whole friend group, fr fr β from ./include/net/libeth/xdp.h:
- struct
libeth_xdp_buff(9) __LIBETH_XDP_ONSTACK_BUFF(9)LIBETH_XDP_ONSTACK_BUFF(9)libeth_xdpsq_shared(9)libeth_xdpsq_id(9)libeth_xdpsq_get(9)libeth_xdpsq_put(9)libeth_xdpsq_lock(9)libeth_xdpsq_unlock(9)libeth_xdpsq_deinit_timer(9)libeth_xdpsq_queue_timer(9)libeth_xdpsq_run_timer(9)enum (anonymous)(9)enum (anonymous)(9)- struct
libeth_xdp_tx_frame(9) - struct
libeth_xdp_tx_bulk(9) LIBETH_XDP_ONSTACK_BULK(9)- struct
libeth_xdpsq(9) - struct
libeth_xdp_tx_desc(9) libeth_xdp_ptr_to_priv(9)libeth_xdp_priv_to_ptr(9)libeth_xdp_tx_xmit_bulk(9)libeth_xdp_tx_queue_head(9)libeth_xdp_tx_queue_frag(9)libeth_xdp_tx_queue_bulk(9)libeth_xdp_tx_fill_stats(9)libeth_xdp_tx_fill_buf(9)__libeth_xdp_tx_flush_bulk(9)libeth_xdp_tx_flush_bulk(9)libeth_xdp_xmit_init_bulk(9)libeth_xdp_xmit_frame_dma(9)libeth_xdp_xmit_queue_head(9)libeth_xdp_xmit_queue_frag(9)libeth_xdp_xmit_queue_bulk(9)libeth_xdp_xmit_fill_buf(9)libeth_xdp_xmit_flush_bulk(9)__libeth_xdp_xmit_do_bulk(9)libeth_xdp_xmit_do_bulk(9)libeth_xdp_tx_init_bulk(9)libeth_xdp_init_buff(9)libeth_xdp_save_buff(9)libeth_xdp_return_stash(9)libeth_xdp_return_buff(9)libeth_xdp_prepare_buff(9)libeth_xdp_process_buff(9)libeth_xdp_buff_stats_frags(9)__libeth_xdp_run_prog(9)__libeth_xdp_run_flush(9)libeth_xdp_run_prog(9)__libeth_xdp_run_pass(9)libeth_xdp_run_pass(9)libeth_xdp_finalize_rx(9)LIBETH_XDP_DEFINE_TIMER(9)LIBETH_XDP_DEFINE_FLUSH_TX(9)LIBETH_XDP_DEFINE_FLUSH_XMIT(9)LIBETH_XDP_DEFINE_RUN_PROG(9)LIBETH_XDP_DEFINE_RUN_PASS(9)LIBETH_XDP_DEFINE_RUN(9)LIBETH_XDP_DEFINE_FINALIZE(9)libeth_xdp_buff_to_rq(9)libeth_xdpmo_rx_hash(9)__libeth_xdp_complete_tx(9)libeth_xdp_set_features(9)libeth_xdp_set_features_noredir(9)
heads up bestie: those twoenum (anonymous)(9)entries are literally both namedenum (anonymous)in the original, so yeah, two of them, don't @ me π they're staying exactly as written π«Ά
π and that's the page!! this little icon was shipped as part of the kernel source tree from ./include/net/libeth, dated October 2026, and she's serving Kernel API Manual realness from section 9 β go read the rest of the squad, muah ππ mwah β¨
π¦ 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