netdev_tx_completed_queue(9)
β¨ netdev_tx_completed_queue β¨
okay so this is a page from the Kernel API Manual (yes, the Kernel API Manual, we're in the big leagues bestie) and it's about one tiny function that does one tiny job, but the way it does that job is kind of iconic ngl π
π NAME π
netdev_tx_completed_queue β report number of packets/bytes at TX completion. that's it, that's the whole vibe β¨
π¦ SYNOPSIS π¦
void netdev_tx_completed_queue (struct netdev_queue *dev_queue ,
unsigned int pkts , unsigned int bytes );
like, look at her. three args, returns nothing, zero drama π
πΈ ARGUMENTS πΈ
dev_queueβ network device queue. the queue in question, the main character of this whole operation πpktsβ number of packets. and yes, (currently ignored) β she's literally just there for decoration rn, no cap πbytesβ number of bytes dequeued from the device queue. this one actually gets used, she's the responsible one π«Ά
π DESCRIPTION π
Okay so listen, this is the important part and I need you to hear me:
Must be called at most once per TX completion round (and not per individual packet), so that BQL can adjust its limits appropriately.
fr fr fr. once per round, NOT once per packet. if you call it per packet you're doing too much and BQL is gonna be like "girl what" and its limits won't adjust appropriately. the whole point is BQL gets to do its little adjustment thing, and it can only do that if you don't spam it. periodt πβ¨
β SEE ALSO β
this list is long long, so buckle up, bestie β every single one of these is part of the squad:
Kernel file ./include/linux/netdevice.h
struct gro_node(9)napi_is_scheduled(9)napi_schedule(9)napi_schedule_irqoff(9)napi_complete_done(9)napi_synchronize(9)napi_if_scheduled_mark_missed(9)enum netdev_priv_flags(9)struct net_device(9)netdev_priv(9)netdev_from_priv(9)netif_napi_add(9)netif_napi_add_config(9)netif_napi_add_tx(9)__netif_napi_del(9)netif_napi_del(9)netif_start_queue(9)netif_wake_queue(9)netif_stop_queue(9)netif_queue_stopped(9)netdev_queue_set_dql_min_limit(9)netdev_txq_bql_enqueue_prefetchw(9)netdev_txq_bql_complete_prefetchw(9)netdev_tx_sent_queue(9)netdev_sent_queue(9)netdev_completed_queue(9)netdev_tx_reset_subqueue(9)netdev_reset_queue(9)netdev_cap_txqueue(9)netif_running(9)netif_start_subqueue(9)netif_stop_subqueue(9)__netif_subqueue_stopped(9)netif_subqueue_stopped(9)netif_wake_subqueue(9)netif_attr_test_mask(9)netif_attr_test_online(9)netif_attrmask_next(9)netif_attrmask_next_and(9)netif_is_multiqueue(9)dev_hold(9)dev_put(9)linkwatch_sync_dev(9)netif_carrier_ok(9)netif_dormant_on(9)netif_dormant_off(9)netif_dormant(9)netif_testing_on(9)netif_testing_off(9)netif_testing(9)netif_oper_up(9)netif_device_present(9)netif_tx_lock(9)__dev_uc_sync(9)__dev_uc_unsync(9)__dev_mc_sync(9)__dev_mc_unsync(9)
and that's the whole page, bestie π§π this cutie lives in ./include/linux, dated October 2026 β mwah, go call her exactly once per TX completion round, ily, bye π
π₯
π¦ 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