summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwifiex/sdio.c
diff options
context:
space:
mode:
authorCathy Luo <cluo@marvell.com>2015-03-12 01:29:31 -0700
committerKalle Valo <kvalo@codeaurora.org>2015-03-16 18:04:20 +0200
commit2c11ab90067a8bb9d7dca3e65ace950fcd9c2f1b (patch)
tree408f2a872b548f720a684766c5e3082dc8cfc604 /drivers/net/wireless/mwifiex/sdio.c
parent52f119ddea412af870fb84412c0f7832e85c7663 (diff)
downloadlinux-stable-2c11ab90067a8bb9d7dca3e65ace950fcd9c2f1b.tar.gz
linux-stable-2c11ab90067a8bb9d7dca3e65ace950fcd9c2f1b.tar.bz2
linux-stable-2c11ab90067a8bb9d7dca3e65ace950fcd9c2f1b.zip
mwifiex: fix a bug in Rx multiport aggregation logic
It's been observed Rx aggregated packets are always followed by a single Rx packet. This patch improves our logic to add that extra packet in next aggregation. Signed-off-by: Cathy Luo <cluo@marvell.com> Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/mwifiex/sdio.c')
-rw-r--r--drivers/net/wireless/mwifiex/sdio.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/net/wireless/mwifiex/sdio.c b/drivers/net/wireless/mwifiex/sdio.c
index 57d85ab442bf..9ef010bfa7d9 100644
--- a/drivers/net/wireless/mwifiex/sdio.c
+++ b/drivers/net/wireless/mwifiex/sdio.c
@@ -1133,6 +1133,7 @@ static int mwifiex_sdio_card_to_host_mp_aggr(struct mwifiex_adapter *adapter,
s32 f_do_rx_aggr = 0;
s32 f_do_rx_cur = 0;
s32 f_aggr_cur = 0;
+ s32 f_post_aggr_cur = 0;
struct sk_buff *skb_deaggr;
u32 pind;
u32 pkt_len, pkt_type, mport;
@@ -1169,7 +1170,7 @@ static int mwifiex_sdio_card_to_host_mp_aggr(struct mwifiex_adapter *adapter,
} else {
/* No room in Aggr buf, do rx aggr now */
f_do_rx_aggr = 1;
- f_do_rx_cur = 1;
+ f_post_aggr_cur = 1;
}
} else {
/* Rx aggr not in progress */
@@ -1280,9 +1281,13 @@ rx_curr_single:
mwifiex_decode_rx_packet(adapter, skb, pkt_type);
}
+ if (f_post_aggr_cur) {
+ dev_dbg(adapter->dev, "info: current packet aggregation\n");
+ /* Curr pkt can be aggregated */
+ mp_rx_aggr_setup(card, skb, port);
+ }
return 0;
-
error:
if (MP_RX_AGGR_IN_PROGRESS(card)) {
/* Multiport-aggregation transfer failed - cleanup */