DQA - DYNAMIC QUEUE ALLOCATION -INTRODUCTION(9)
π DQA - Dynamic Queue Allocation -introduction(9) β¨
okay so bestie, welcome to the Kernel API Manual, section 9, and this page is literally DQA - Dynamic Queue Allocation -introduction β yes the -introduction is part of the name, don't come for me π«Ά
πΈ NAME πΈ
Dynamic Queue Allocation (AKA "DQA") β the iwlwifi feature that lets queues get allocated on-demand instead of being statically grabbed ahead of time π
β¨ DESCRIPTION β¨
Dynamic Queue Allocation (AKA "DQA") is a feature implemented in iwlwifi driver to allow dynamic allocation of queues on-demand, rather than allocate them statically ahead of time. Like, ideally? We would love to allocate one queue per RA/TID, thus allowing an AP β for example β to send BE traffic to STA2 even if it also needs to send traffic to a sleeping STA1, without being blocked by the sleeping station. main character energy, no blocking, we love to see it π
Although the queues in DQA mode are dynamically allocated, there are still some queues that are statically allocated, and here's the whole roster, bestie, no skips:
TXQ #0β command queueTXQ #1β aux framesTXQ #2β P2P device framesTXQ #3β P2P GO/SoftAP GCAST/BCAST framesTXQ #4β BSS DATA frames queueTXQ #5-8β Non-QoS and MGMT frames queue poolTXQ #9β P2P GO/SoftAP probe responsesTXQ #10-31β DATA frames queue pool
The queues are dynamically taken from either the MGMT frames queue pool or the DATA frames one. See the iwl_mvm_dqa_txq for more information on every queue π
When a frame for a previously unseen RA/TID comes in, it needs to be deferred until a queue is allocated for it, and only then can be TXed. So it's placed into iwl_mvm_tid_data.deferred_tx_frames, and a worker called mvm->add_stream_wk later allocates the queues and TXes the deferred frames. it's giving "hold my spot in the group chat" π
For convenience, MGMT is considered as if it has TID=8, and go to the MGMT queues in the pool. If there is no longer a free MGMT queue to allocate, a queue will be allocated from the DATA pool instead. And since QoS NDPs can create a problem for aggregations, they too will use a MGMT queue. iconic crossover event β¨
When adding a STA, a DATA queue is reserved for it so that it can TX from it. If no such free queue exists for reserving, the STA addition will fail β yeah, it's a real "no queue, no entry" situation π«
If the DATA queue pool gets exhausted, no new STA will be accepted, and if a new RA/TID comes in for an existing STA, one of the STA's queues will become shared and will serve more than the single TID (but always for the same RA!). lowkey teamwork fr fr π€
When a RA/TID needs to become aggregated, no new queue is required to be allocated, only mark the queue as aggregated via the ADD_STA command. Note, however, that a shared queue cannot be aggregated, and only after the other TIDs become inactive and are removed β only then can the queue be reconfigured and become aggregated. patience, bestie, glow-up takes time π
When removing a station, its queues are returned to the pool for reuse. Here we also need to make sure that we are synced with the worker thread that TXes the deferred frames so we don't get into a situation where the queues are removed and then the worker puts deferred frames onto the released queues or tries to allocate new queues for a STA we don't need anymore. π like imagine putting frames on a queue that's already gone. we are NOT doing that.
π¦ SEE ALSO π¦
- Kernel file
./drivers/net/wireless/intel/iwlwifi/mvm/sta.hstation table - introduction(9) - station table - locking(9)
- station table - internal stations(9)
- station table - AP Station in STA mode(9)
- station table - Drain vs. Flush(9)
- station table - fw restart(9)
- AP mode - PS(9)
- enum iwl_mvm_agg_state(9)
- struct iwl_mvm_tid_data(9)
- enum iwl_mvm_rxq_notif_type(9)
- struct iwl_mvm_internal_rxq_notif(9)
- struct iwl_mvm_rxq_dup_data(9)
- struct iwl_mvm_link_sta(9)
- struct iwl_mvm_sta(9)
- struct iwl_mvm_int_sta(9)
- iwl_mvm_sta_send_to_fw(9)
- struct iwl_mvm_sta_state_ops(9)
and that's the page, bestie π this one came from ./drivers/net/wireless/intel/i... β the version source line, dated October 2026 β and it signs off as DQA - Dynami...introduction(9). stan. periodt. π
π¦ 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