After Patch C v3 / D / E / F / G all merged, the remaining cleanup
target is the per-RX-frame tasklet defer that ieee80211_rx_irqsafe
introduces. Patch C2 migrates all 6 call sites in bes2600 to
ieee80211_rx_list, the process-context API verified per the
kerneldoc audit (Task #19, mainline include/net/mac80211.h:5324-5345).
Key constraints from kerneldoc:
- cannot mix _list and _irqsafe for the same hardware
(=> all 6 sites convert atomically)
- requires local_bh_disable + rcu_read_lock wrap
- calls must be synchronized for a single hardware
(=> bh-thread-as-sole-RX-context post-v3 satisfies trivially)
Plan §4.2 design decision: per-batch wrap (Option B), wrapping
bes2600_sdio_read_rx_batch outer loop, rather than per-call wrap.
Captures the actual batch benefit.
Open questions for the Phase 5 reviewer:
1. rx_list draining semantics — does mainline expect explicit
netif_receive_skb_list at end-of-batch, or does mac80211
internal-deliver? Need to verify by reading mt76 / iwl_pcie
usage before Phase 6 lands.
2. beacon path (wsm.c:2415) SKB ownership — hw_priv->beacon is
long-lived; after _rx_list consumes it, the field would be
dangling. Audit before Phase 6.
Predicted throughput delta: +5-15% over v3 N=3 baseline (2.352 MB/s),
medium confidence. Smaller-than-expected delta = "marginal but no
regression, ship for upstream-cleanliness".
Phase 7 N=3 ramp uses wired enu1 path + per-rep fresh nc listener
per the rig-failure-is-finding lesson.