ath6kl: pass only unicast frames for aggregation
When pinging form ar6003 to the AP RTT was high even when power save was disabled: 100 packets transmitted, 97 received, 3% packet loss, time 99125ms rtt min/avg/max/mdev = 1.875/46.733/795.506/139.181 ms After some investigation one reason for this was that received multicast traffic confused the aggrecation logic and caused 400 ms timeouts when receiving multicast frames from AP. A simple way to fix is to pass only unicast frames for aggregation. This improves RTT: 100 packets transmitted, 99 received, 1% packet loss, time 99144ms rtt min/avg/max/mdev = 2.083/13.084/403.390/56.794 ms Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
parent
865121361f
commit
5694f96296
|
@ -1230,9 +1230,15 @@ void ath6kl_rx(struct htc_target *target, struct htc_packet *packet)
|
|||
ath6kl_data_tx(skb1, ar->net_dev);
|
||||
}
|
||||
|
||||
if (!aggr_process_recv_frm(ar->aggr_cntxt, tid, seq_no,
|
||||
is_amsdu, skb))
|
||||
ath6kl_deliver_frames_to_nw_stack(ar->net_dev, skb);
|
||||
datap = (struct ethhdr *) skb->data;
|
||||
|
||||
if (is_unicast_ether_addr(datap->h_dest) &&
|
||||
aggr_process_recv_frm(ar->aggr_cntxt, tid, seq_no,
|
||||
is_amsdu, skb))
|
||||
/* aggregation code will handle the skb */
|
||||
return;
|
||||
|
||||
ath6kl_deliver_frames_to_nw_stack(ar->net_dev, skb);
|
||||
}
|
||||
|
||||
static void aggr_timeout(unsigned long arg)
|
||||
|
@ -1249,10 +1255,6 @@ static void aggr_timeout(unsigned long arg)
|
|||
if (!rxtid->aggr || !rxtid->timer_mon || rxtid->progress)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* FIXME: these timeouts happen quite fruently, something
|
||||
* line once within 60 seconds. Investigate why.
|
||||
*/
|
||||
stats->num_timeouts++;
|
||||
ath6kl_dbg(ATH6KL_DBG_AGGR,
|
||||
"aggr timeout (st %d end %d)\n",
|
||||
|
|
Loading…
Reference in New Issue