The last_rx timestamp which controls timeout of an Rx block ack
session is not updated when a frame is received.
This can result in the session timing out too early.

Not a huge deal because the AP will simply request a new session when
it has more data to send. And many APs do not even enable session
timeouts in which case our timeout handler remains inactive, too.

But we should handle negotiated session timeouts correctly.

ok?

 
diff 02c3ac519701a4fe198f8ee3de592b34a39ee6f7 
d1e8e8a7b10a061d0364e3a63366e646218124a7
blob - 92f77754c4dd9d8a340a24bc2ce6f89ca77e0f84
blob + 983c18557ae9bef84372346fd4833c530994faa3
--- sys/dev/pci/if_iwm.c
+++ sys/dev/pci/if_iwm.c
@@ -5121,6 +5121,9 @@ iwm_rx_reorder(struct iwm_softc *sc, struct mbuf *m, i
        if (rxba == NULL || tid != rxba->tid || rxba->sta_id != IWM_STATION_ID)
                return 0;
 
+       if (rxba->timeout != 0)
+               getmicrouptime(&rxba->last_rx);
+
        /* Bypass A-MPDU re-ordering in net80211. */
        rxi->rxi_flags |= IEEE80211_RXI_AMPDU_DONE;
 
blob - 5cac83fd48ebe997a4cd7842730b0cb05f7c28ee
blob + 1ac1ad3b420a9de838df6e2fc30d21c5bcb8661f
--- sys/dev/pci/if_iwx.c
+++ sys/dev/pci/if_iwx.c
@@ -4202,6 +4202,9 @@ iwx_rx_reorder(struct iwx_softc *sc, struct mbuf *m, i
        if (rxba == NULL || tid != rxba->tid || rxba->sta_id != IWX_STATION_ID)
                return 0;
 
+       if (rxba->timeout != 0)
+               getmicrouptime(&rxba->last_rx);
+
        /* Bypass A-MPDU re-ordering in net80211. */
        rxi->rxi_flags |= IEEE80211_RXI_AMPDU_DONE;
 

Reply via email to